如何找到两个 Git 分支的最近共同祖先?
问问题
197392 次
4 回答
1263
您正在寻找git merge-base
. 用法:
$ git merge-base branch2 branch3
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
于 2009-10-10T21:47:38.127 回答
64
git diff master...feature
显示当前(可能是多次提交)功能分支的所有新提交。
man git-diff
文件表明:
git diff A...B
是相同的:
git diff $(git merge-base A B) B
但...
更容易输入和记住。
正如Dave所提到的,HEAD
可以省略特殊情况。所以:
git diff master...HEAD
是相同的:
git diff master...
如果当前分支是feature
.
最后,记住顺序很重要!Doinggit diff feature...master
将显示 on master
not on的更改feature
。
我希望更多的 git 命令支持这种语法,但我不认为他们支持。有些甚至有不同的语义...
:Git 提交范围中的双点“..”和三点“...”有什么区别?
于 2016-07-18T12:39:48.233 回答
45
如先前的回答所述,虽然git merge-base
有效,
$ git merge-base myfeature develop
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
如果myfeature
是当前分支,通常情况下,您可以使用--fork-point
:
$ git merge-base --fork-point develop
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
这个论点只适用于足够新的 git 版本。不幸的是,它并不总是有效,而且还不清楚为什么。请参阅本答案末尾指出的限制。
有关完整的提交信息,请考虑:
$ git log -1 $(git merge-base --fork-point develop)
于 2017-02-09T17:23:59.497 回答
13
您可以以gitk
图形方式查看两个分支:
gitk branch1 branch2
然后很容易在两个分支的历史上找到共同的祖先。
于 2017-02-08T17:52:06.540 回答