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

时间:2015-11-25 08:01:18

标签: git

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

git status仅显示当前分支。

2 个答案:

答案 0 :(得分:3)

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

.git/MERGE_HEAD
.git/MERGE_MSG

(如果需要,将.git替换为git rev-parse --git-dir的输出,例如,如果您位于git目录中的子目录中)。 MERGE_HEAD的内容是另一个SHA-1,即使您按名称合并分支; 2 MERGE_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与某些现有分支提示匹配,那么这对于许多或大多数用途来说都是合适的分支名称。如果它匹配多个分支提示-ie,如果单个提交是几个当前分支名称的提示 - 其中任何一个都可能是合适的。)

1 还有第三个文件.git/MERGE_MODE,告诉git您首先处于合并过程中。但它通常是空的。

2 您可以按原始SHA-1或任何其他方式合并以指定提交。并不要求合并来自另一个分支。就此而言,在进行新的合并提交时,您也可以处于“分离的HEAD”模式,因此不需要将合并转换为命名分支。

答案 1 :(得分:1)

有一个简单的单行代码就可以找到答案,即使您在子目录和/或git worktree命令创建的git工作树中,它也可以正常工作:

git rev-parse MERGE_HEAD