Git:查找两个分支最近的共同祖先

r1zhe5dt  于 2023-01-15  发布在  Git
关注(0)|答案(6)|浏览(431)

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

jv2fixgn

jv2fixgn1#

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

$ git merge-base branch2 branch3
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
szqfcxe2

szqfcxe22#

    • 一月一日**

显示了当前特性分支的所有新提交(可能是多次提交)。
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,这就足够了。
最后,记住顺序很重要!执行git diff feature...master将显示master上的更改,而不是feature上的更改。
我希望有更多的git命令支持这种语法,但我不认为它们支持,有些甚至对...有不同的语义:What are the differences between double-dot ".." and triple-dot "..." in Git commit ranges?

oprakyz7

oprakyz73#

如前面的回答所述,尽管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)
iq3niunx

iq3niunx4#

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

gitk branch1 branch2

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

bjg7j2ky

bjg7j2ky5#

查找所有分支的公共祖先

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

unftdfkk6#

git checkout myRep
git pull origin main --allow-unrelated-histories
git push origin myRep

相关问题