当我执行git merge
时,还没有创建新的提交(因为冲突或--no-commit
选项),如何检查我合并的是哪个分支?
git status
仅显示当前分支。
答案 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