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

时间:2017-04-30 23:27:29

标签: git branching-and-merging

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

git merge-base branch another_branch

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

换句话说:

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

HEAD在F.如果我在这里做git merge-base,我得到的提交是I,而我要找的那个是A,或者也许是Z.是否有任何git指令找到它?

2 个答案:

答案 0 :(得分:2)

如果你这样做

git merge-base C I

你得到你想要的提交A.什么是C和我?它们是合并提交D的父提交。

你好,他们得到了吗?

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

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

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

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

您必须将MERGE_COMMIT替换为合并提交D的哈希值

编辑: 正如@poke所说,

更简单
git merge-base MERGE_COMMIT^ MERGE_COMMIT^2 

答案 1 :(得分:0)

我通常需要在分支HEAD的尖端与远程主开发分支(origin/dev)之间找到祖先。这是我使用的:

git log --reverse --boundary --format=%h HEAD ^origin/dev | head -1

它基本上说:

  • 带走所有origin/dev以外的祖先
  • 包括边界(分叉点)
  • 颠倒顺序,以使分叉点成为列表中的第一个
  • 登录仅显示SHA的格式
  • 参加此列表中的第一个