如何查找以前的合并提交

时间:2012-05-09 23:45:33

标签: git

如何找到两个分支之间的先前合并提交?

我希望看到自上次将发布分支合并到主分支以来我的主分支中的更改。要查看自上一个分支以来发布分支中的更改,它就像git diff ...release

一样简单

但显然git diff release...不起作用,因为它还包括上次合并之前的所有更改。因此,我认为我需要上次合并的提交ID将其传递给git diff

git log --reverse --ancestry-path `git merge-base HEAD release`.. \ 
        --format=format:%H|head -n1

似乎有用,可以与git diff $(...)一起使用,但看起来非常复杂。有更简单的解决方案吗?

示例

  I
 / \
A1 B1
 \ |
|  M   
|  |
A2 B2

这里I是初始提交。 A[12]是发布提交,B[12]是主提交。 M是之前的提交。在示例中,最后一次合并和主控之间的更改只是B2引入的更改。 git merge-base A2 B2返回A 1。 git diff B2 A1包含B1的更改。因此,问题是如何在一般更复杂的情况下找到M,以便可以运行git diff M B2而无需手动查找M

2 个答案:

答案 0 :(得分:6)

您正在寻找的是两个分支开始不同的点,而不是两个分支之间的最后一个合并。这两个概念是不同的,因为您的发布分支可能在合并后的某个时间被快速转发。

git merge-base master release将找到master和release分支的最新共同祖先(即两者共同的最后一次提交)。

然后,在主上,您可以使用git diff [common ancestor] HEAD查看自共同祖先以来对主人所做的更改。

答案 1 :(得分:-1)

这将显示分支foo和分支主机

之间的最新合并提交
git log foo master --oneline --date-order --merges -1

--oneline is just to keep the output short
--date-order to get the latest first
--merges to only show merge commits
-1 to display the first result only