为了找到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指令找到它?
答案 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
的格式