在交互式变基过程中,例如git rebase -i HEAD~12
和添加/编辑一些提交,我经常搞不清我在编辑哪个提交,尤其是当有合并冲突时:
> git status
rebase in progress; onto 55d9292
You are currently rebasing branch 'master' on '55d9292'.
(fix conflicts and then run "git rebase --continue")
(use "git rebase --skip" to skip this patch)
(use "git rebase --abort" to check out the original branch)
Unmerged paths:
(use "git reset HEAD <file>..." to unstage)
(use "git add <file>..." to mark resolution)
both modified: file
no changes added to commit (use "git add" and/or "git commit -a")
我怎样才能清楚地了解当前状态中涉及的所有补丁程序?例如,什么是基本补丁,我“挑选”的补丁,合并冲突来自哪个补丁?
2条答案
按热度按时间xjreopfe1#
在交互式变基过程中,例如
git rebase -i HEAD~12
和添加/编辑一些提交,我经常搞不清我在编辑哪个提交在Git 2.17(2018年第二季度)中,新的“
--show-current-patch
”选项提供了一种面向最终用户的方式,当“git rebase
”(和“git am
”)停止冲突时,可以应用差异。参见commit fbd7a23,commit 6633529,commit 984913a(2018年2月11日)by Nguyễn Thái Ngọc Duy (
pclouds
)。求助人:Tim Landscheidt (
scfc
)。(由Junio C Hamano --
gitster
--合并于commit 9ca488c,2018年3月6日)rebase:引入并使用伪ref REBASE_HEAD
新命令
git rebase --show-current-patch
对于查看与当前rebase状态相关的提交非常有用。然而,有些人可能会发现它后面的“
git show
”命令太有限了。你可能想增加上下文行,做一个忽略空格的比较…
对于这些高级用例,用户可以使用新的pseudo ref
REBASE_HEAD
执行他们想要的任何命令。**这也有助于显示停止的提交来自哪里,这在以前实现
--show-current-patch
**的补丁中很难看到。with Git 2.26 (Q2 2020), the new
git rebase/am --show-current-patchd=diff
mode。Git 2.42(2023年第3季度)记录了更多的伪引用,包括
REBASE_HEAD
。参见commit 982ff3a,commit 4fa1edb,commit b7dd54a,commit 1ef3c61,commit 6ec5f46,commit bc11bac(2023年5月22日)by Philippe Blain (
phil-blain
)。(由Junio C Hamano --
gitster
--合并于commit 0899beb,2023年6月20日)revisions.txt
:记录更多特殊参考文献签字人:菲利普·布兰
一些特殊的引用,即HEAD,
FETCH_HEAD,
ORIG_HEAD,
MERGE_HEAD
和CHERRY_PICK_HEAD,
在'gitrevision'中提到和描述,但其他一些,即REBASE_HEAD,
REVERT_HEAD,
和BISECT_HEAD,
没有。添加对这些特殊参考文献的简短描述。
revisions
现在在其手册页中包括:仅适用于
HEAD
、FETCH_HEAD
、ORIG_HEAD
、MERGE_HEAD
、REBASE_HEAD
、REVERT_HEAD
、CHERRY_PICK_HEAD
和BISECT_HEAD
);revisions
现在在其手册页中包括:REBASE_HEAD
:在变基期间,记录当前由于冲突或交互式变基中的
edit
命令而停止操作的提交。7vhp5slm2#
如果有冲突,可以运行
git show
查看最后一次应用的提交。然后,当打开冲突文件时,冲突将一方面显示文件在最后一次应用提交时的状态,另一方面显示文件在当前应用提交时的状态。
示例:
我创建了一个带有文件“a”的repo。我的第一次提交是创建文件:
然后,我修改了文件并将其提交为“commit1”:
然后,再做一次提交“commit2”:
然后我重新设置基础以删除commit1:
无法应用Commit2,因为其上下文已更改(commit1丢失)。请注意
error: could not apply 14d798e... commit2
的哈希值是commit2。在冲突中,如果我运行git show
,我会得到:而a的内容是:
其中HEAD是最后一次应用的提交(初始),第二部分是应用失败的提交。
我希望这会有所帮助。