find两个git分支的共同祖先

我如何find两个Git分支的最近共同的祖先提交?

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

 $ git merge-base branch2 branch3 050dc022f3a65bdc78d97e2b1ac9b595a924c3f2 

git diff master...feature

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

man git-diff文件:

 git diff A...B 

是相同的:

 git diff $(git merge-base AB) B 

但是...更容易打字和记忆。

正如戴夫所说, HEAD的特殊情况可以省略。 所以:

 git diff master...HEAD 

是相同的:

 git diff master... 

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

最后,请记住,顺序很重要! 做混合git diff feature...master显示在master不在feature上的变化。

我希望更多的git命令将支持这种语法,但我不认为他们这样做。 有些甚至对于...有不同的语义: Git提交范围中的双点“..”和三点“…”之间有什么区别?

正如前面的回答所指出的, git merge-base作品:

 $ git merge-base myfeature develop 050dc022f3a65bdc78d97e2b1ac9b595a924c3f2 

但是如果myfeature是当前分支,则可以使用use --fork-point

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

这个参数只适用于最近版本的git。 也请看这个答案 。


对于完整的提交信息,请考虑:

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

使用gitk您可以以graphics方式查看这两个分支:

 gitk branch1 branch2 

那么在两个分支的历史中很容易find共同的祖先。

一旦获得,例如,可以使用公共祖先SHA来查看遥控器上的可用提交,如下所示:

 #!/bin/bash git remote update REMBR=`git show-remote-branch` REMHEAD=`git rev-parse $REMBR` MERGEBASE=`git merge-base HEAD $REMBR` REMURL=`git config remote.origin.url` git request-pull $MERGEBASE $REMURL $REMHEAD