如何查找先前的合并提交

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


这不是最有效的方法,但你可以查看 git log --graph --oneline 来找到提交。 - Shahbaz
2个回答

6
看起来你想要找到两个分支开始分歧的点,而不是两个分支之间最后一次合并的点。这两个概念是不同的,因为你的发布分支可能在合并后的某个时间被快速推进了。
使用git merge-base master release可以找到主分支和发布分支的最近共同祖先(即两者共有的最后一个提交)。
然后,在主分支上,你可以使用git diff [共同祖先] HEAD来查看自共同祖先以来对主分支所做的更改。

我已经在问题中添加了一个示例,以说明为什么仅使用 git merge-base 无法解决问题。 - Roland Schulz
@Roland Shulz 我明白。我会尝试提供一个不同的答案。 - Jake Greene

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

3
这个命令似乎给我提供了两个分支中最后一个合并的提交记录。这包括了master或foo与其他分支合并的情况。但我希望得到的是foo和master之间的最后一个合并,而不是与其他任何分支的合并记录。 - Roland Schulz
如果你只记录了一个分支,这个命令可以帮助你获取另一个分支的最后一次合并:git log master --oneline [...] - Vagner Gon

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