git:我如何找到两个分支的共同祖先......已经 merge

标签 git branching-and-merging

为了找到 2 个 git 分支的共同祖先,需要做的是:

git merge-base branch another_branch

好的。但是……如果两个分支都已经 merge 了怎么办?当我在这种情况下使用 merge-base 时,我得到的提交是 merge 前的最新提交,我想知道两个分支在“merge 前”出现的共同祖先。

换句话说:

Z - A - B - C - D - E - F
     \          /
      G - H - I 

HEAD 位于 F。如果我在这里执行 git merge-base,我得到的提交是 I,而我我正在寻找 A,或者可能是 Z。是否有任何 git 指令可以找到它?

最佳答案

如果你这样做

git merge-base C I

你得到了你想要的提交 A。 C和我是什么?它们是您的 merge 提交 D 的父提交。

嘿,你明白了吗?

git log --pretty=%P -n 1 D 

给你两个字符串。这两个字符串是您需要的提交 C 和 I。

如果你想一起做,你可以写

git merge-base $(git log --pretty=%P -n 1 MERGE_COMMIT)

你必须用 merge 提交 D 的散列替换 MERGE_COMMIT

编辑: 正如@poke 所说,它更简单

git merge-base MERGE_COMMIT^ MERGE_COMMIT^2 

关于git:我如何找到两个分支的共同祖先......已经 merge ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43712418/

相关文章:

git - 如何在自己的计算机上设置自己的本地 Git 服务器?

git - _netrc/.netrc 替代 cURL

Git stash 卡住(控制台变得无响应)

git - 如何恢复添加到 git 但被 checkout 覆盖的文件

mercurial - 如何解开/撤消对应用的 MQ 补丁的 merge ?

merge 2 个分支之前进行 Git 比较

linux - 如何使用 IdentityFile 通过 SSH 远程运行 sudo 命令?

visual-studio - 如何合并整个 TFS 分支

svn - 带有本地修改的SVN分支

git - 无法将功能书签 merge 到 mercurial 中的主书签中