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


当前回答

找到所有分支的共同祖先

git merge-base $(git branch --format "%(refname)")

其他回答

找到所有分支的共同祖先

git merge-base $(git branch --format "%(refname)")

正如之前的回答中所提到的,尽管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) 
git checkout myRep
git pull origin main --allow-unrelated-histories
git push origin myRep

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

gitk branch1 branch2

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

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

$ git merge-base branch2 branch3
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2