如何找到两个Git分支的最新共同祖先?
您正在寻找#0。用法:
$ git merge-base branch2 branch3050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
git diff master...feature
显示当前(可能是多提交)功能分支的所有新提交。
man git-diff文件:
man git-diff
git diff A...B
与以下相同:
git diff $(git merge-base A B) B
但是...更容易打字和记忆。
...
如前所述,HEAD的特殊情况可以省略。所以:
HEAD
git diff master...HEAD
git diff master...
如果当前分支为feature,这就足够了。
feature
最后,记住顺序很重要!执行git diff feature...master将显示master上的更改,而不是feature上的更改。
git diff feature...master
master
我希望更多的git命令能够支持这种语法,但我认为他们不会。有些甚至对...:Git提交范围中的双点“…”和三点“…”有什么区别?有不同的语义学
使用gitk,您可以以图形方式查看两个分支:
gitk
gitk branch1 branch2
然后很容易在两个分支的历史中找到共同的祖先。
如前所述,虽然git merge-base有效,
git merge-base
$ git merge-base myfeature develop050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
如果myfeature是当前分支,这是常见的,你可以使用#1:
myfeature
$ git merge-base --fork-point develop050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
此参数仅适用于足够新版本的git。不幸的是,它并不总是有效,并且不清楚原因。请参考这个答案末尾指出的限制。
对于完整的提交信息,请考虑:
$ git log -1 $(git merge-base --fork-point develop)
git checkout myRepgit pull origin main --allow-unrelated-historiesgit push origin myRep