如何查找以前的合并提交

Rol*_*ulz 9 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
Run Code Online (Sandbox Code Playgroud)

似乎工作,可以使用git diff $(...),但它似乎非常复杂.有更简单的解决方案吗?

  I
 / \
A1 B1
 \ |
|  M   
|  |
A2 B2
Run Code Online (Sandbox Code Playgroud)

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

Jak*_*ene 6

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

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

然后,在master上,您可以使用它git diff [common ancestor] HEAD来查看自共同祖先以来对master进行的更改.


ral*_*nja 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
Run Code Online (Sandbox Code Playgroud)

  • 该命令似乎给了我任一分支中的最后一次合并。这包括将 master 或 foo 与其他内容合并。但我希望 foo 与 master 的最后一次合并而不是与其他任何东西合并。 (3认同)