Git:找到两个分支的最新共同祖先

时间:2009-10-10 21:43:09

标签: git

如何找到两个Git分支的最新共同祖先?

4 个答案:

答案 0 :(得分:871)

您正在寻找git merge-base。用法:

$ git merge-base branch2 branch3
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2

答案 1 :(得分:33)

<强> git diff master...feature

显示当前(可能是多次提交)功能分支的所有新提交。

man git-diff记录:

git diff A...B

与:

相同
git diff $(git merge-base A B) B

...更容易输入和记住。

如上所述by Dave,可以省略HEAD的特例。所以:

git diff master...HEAD

与:

相同
git diff master...

如果当前分支是feature就足够了。

最后,请记住订单很重要!执行git diff feature...master会显示master上的更改,而不是feature

我希望更多git命令支持该语法,但我认为它们不支持。有些甚至对...What are the differences between double-dot ".." and triple-dot "..." in Git commit ranges?

有不同的语义

答案 2 :(得分:17)

如前面的回答所述,git merge-base有效:

$ git merge-base myfeature develop
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2

但如果myfeature是当前分支,那么您可以使用 --fork-point

$ git merge-base --fork-point develop
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2

此参数仅适用于最新版本的git。不幸的是,它并不总是有效,并且不清楚为什么。请参阅this answer末尾注明的限制。

有关完整提交信息,请考虑:

$ git log -1 $(git merge-base --fork-point develop) 

答案 3 :(得分:10)

使用gitk,您可以以图形方式查看两个分支:

gitk branch1 branch2

然后在两个分支的历史中很容易找到共同的祖先。