我目前正在合并哪些提交?

Which commits am I currently merging?

当我执行git merge时,还没有创建新的提交(因为冲突或--no-commit选项),如何检查我正在合并哪个分支?

git status 仅显示当前分支。

A git merge 由于冲突而停止,留下两个 1 个文件,其中包含有关正在合并的内容的信息:

.git/MERGE_HEAD
.git/MERGE_MSG

(如果需要,将 .git 替换为 git rev-parse --git-dir 的输出,例如,如果您位于 git 目录中的子目录中)。 MERGE_HEAD 的内容是另一个 SHA-1,即使您按名称合并分支;2MERGE_MSG 的内容包含分支名称如果有的话。例如:

$ git merge --no-commit origin/master
Automatic merge went well; stopped before committing as requested
$ cat .git/MERGE_HEAD
d1574b852963482d4b482992ad6343691082412f
$ cat .git/MERGE_MSG
Merge remote-tracking branch 'origin/master'

(因为没有冲突,我不得不在这里使用--no-commit)。

(如果两个文件中都没有分支名称,但 MERGE_HEAD 文件的 SHA-1 匹配一些现有的分支提示,那么对于许多或大多数用途来说,这将是一个合适的分支名称。如果它匹配多个分支提示——即,如果单个提交是多个当前分支名称的提示——其中任何一个都可能是合适的。)


1还有第三个文件 .git/MERGE_MODE,它首先告诉 git 您正在进行合并。不过它经常是空的。

2您可以通过原始 SHA-1 或任何其他方式合并以指定提交。不要求合并来自另一个分支。就此而言,您也可以在进行新的合并提交时处于 "detached HEAD" 模式,因此不需要合并到命名分支中。

有一个简单的单行代码可以解决这个问题,即使您位于 git worktree 命令创建的 git 工作树中的子目录 and/or 中,它也能正常工作:

git rev-parse MERGE_HEAD