git - 如何找到以前的 merge 提交

标签 git

如何找到两个分支之间的前一个 merge 提交?

我想查看自上次将发布分支 merge 到主分支以来我的主分支中的更改。要查看发布分支自上一个分支以来的变化,就像 git diff ...release

一样简单

但显然 git diff release... 不起作用,因为它还包含了最后一次 merge 之前的所有更改。因此我认为我需要最后一次 merge 的提交 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 是之前的提交。在示例中,最后一次 merge 和 master 之间的变化只是 B2 引入的变化。 git merge-base A2 B2 返回 A1。 git diff B2 A1 包含了 B1 的变化。因此,问题是如何在一般更复杂的情况下找到 M,以便可以运行 git diff M B2 而不必手动找到 M

最佳答案

看来你要找的是两个分支开始不同的点,而不是两个分支之间的最后一次 merge 。这两个概念是不同的,因为你的发布分支可能在 merge 后的某个时间快进了。

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

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

关于git - 如何找到以前的 merge 提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10525695/

相关文章:

python - 如何在没有 pip 的情况下将来自 github 的库包含在 python 项目中?

ios - 忽略库 .xcodeproj 文件更改

git - 在 Heroku 上部署 revel 应用程序

mysql - Windows中的Heroku安装错误

git - 在 Heroku 上克隆以前的版本

git - 设置 IntelliJ IDEA 和 Git

java - jGit 使用 RevWalk 获取 RevCommit 不返回任何内容

HEAD :refs/for/master 的 git 别名

git - 选择要与 Git 一起使用的私钥

java - git pull 在java中添加、提交和推送