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