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