9

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

我想查看自上次将发布分支合并到主分支以来我的主分支中的更改。要查看自上一个分支以来发布分支的变化,就像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返回A1。并git diff B2 A1包括 的变化B1。因此,问题是如何在一般更复杂的情况下找到 M 以便git diff M B2无需手动查找即可运行M

4

2 回答 2

6

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

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

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

于 2012-05-10T01:29:06.393 回答
0

这将显示分支 foo 和分支 master 之间的最新合并提交

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
于 2012-05-10T00:13:25.473 回答