Git识别两个分支的最近交叉点

7

有没有一种简写方式可以识别两个分支共同的最后提交?例如,如果我有主分支和topic1从主分支分离出来,然后它们都继续更新:

master:
a------b------c------d
        \
topic1:  r------s------t

有没有办法标识出例如b这样的提交?例如,如果有一个名为master#topic1(与topic1#master相同)的东西,意思是“主分支和topic1共享的最近提交”。

我希望能够:

$ git checkout topic1
$ git diff master#topic1..topic1

我知道我可以做以下事情:

git diff master..topic

但我不关心提交记录 cd

2个回答

10

使用git merge-base命令。

NAME
git-merge-base - Find as good common ancestors as possible for a merge

SYNOPSIS
git merge-base [-a|--all] [--octopus] <commit> <commit>…
git merge-base --independent <commit>…

1
@orange:在您的使用情况下是有的!请看我的回答。 - Cascabel
这个答案应该被接受,因为它确实回答了提出的问题。对于问题中的示例,类似 git merge-base master topic 的命令可以确定交汇的提交。 - James Hiew

5
你实际上想问的问题的答案是:
git diff master...topic

请注意三个点。
来自manpage:

git diff [--options] <commit>...<commit> [--] [<path>...]

这种形式是查看包含并最多到第二个<commit>的分支上的更改,从两者的共同祖先开始。 git diff A...B等效于git diff $(git merge-base A B) B。您可以省略任何一个<commit>,这与使用HEAD相同。


这会给出一个差异,但不会识别交叉提交。 - James Hiew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接