如何找到两个Git分支最近的共同祖先?
jv2fixgn1#
您正在查找git merge-base。用法:
git merge-base
$ git merge-base branch2 branch3 050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
szqfcxe22#
显示了当前特性分支的所有新提交(可能是多次提交)。man git-diff记录了以下内容:
man git-diff
git diff A...B
等同于:
git diff $(git merge-base A B) B
但是...更容易键入和记忆。正如Dave所提到的,HEAD的特例可以省略,因此:
...
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?
feature
git diff feature...master
master
oprakyz73#
如前面的回答所述,尽管git merge-base可以工作,
$ git merge-base myfeature develop 050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
如果myfeature是当前分支(常见情况),则可以使用--fork-point:
myfeature
--fork-point
$ git merge-base --fork-point develop 050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
这个论点只适用于最近的git版本,但不幸的是,它并不总是有效,原因也不清楚,请参考this answer末尾提到的限制。有关完整提交信息,请考虑:
$ git log -1 $(git merge-base --fork-point develop)
iq3niunx4#
使用gitk,您可以以图形方式查看两个分支:
gitk
gitk branch1 branch2
然后很容易在两个分支的历史中找到共同的祖先。
bjg7j2ky5#
查找所有分支的公共祖先
git merge-base $(git branch --format "%(refname)")
unftdfkk6#
git checkout myRep git pull origin main --allow-unrelated-histories git push origin myRep
6条答案
按热度按时间jv2fixgn1#
您正在查找
git merge-base
。用法:szqfcxe22#
显示了当前特性分支的所有新提交(可能是多次提交)。
man git-diff
记录了以下内容:等同于:
但是
...
更容易键入和记忆。正如Dave所提到的,
HEAD
的特例可以省略,因此:等同于:
如果电流支路是
feature
,这就足够了。最后,记住顺序很重要!执行
git diff feature...master
将显示master
上的更改,而不是feature
上的更改。我希望有更多的git命令支持这种语法,但我不认为它们支持,有些甚至对
...
有不同的语义:What are the differences between double-dot ".." and triple-dot "..." in Git commit ranges?oprakyz73#
如前面的回答所述,尽管
git merge-base
可以工作,如果
myfeature
是当前分支(常见情况),则可以使用--fork-point
:这个论点只适用于最近的git版本,但不幸的是,它并不总是有效,原因也不清楚,请参考this answer末尾提到的限制。
有关完整提交信息,请考虑:
iq3niunx4#
使用
gitk
,您可以以图形方式查看两个分支:然后很容易在两个分支的历史中找到共同的祖先。
bjg7j2ky5#
查找所有分支的公共祖先
unftdfkk6#