1

既然修订可以有多个父母(合并)和多个孩子,那么“最近的共同祖先”就不能模棱两可吗?

例如:

A---B--C--D                                                                                                                                               
 \   \   /
  \   E /
   \ / /
    F-G

E 和 D 的最近共同祖先可能是 B 或 F。

我尝试在 git 中复制它,我认为它给了 B 作为共同的祖先。这里有理由选择 B 而不是 F 吗?也许诉诸时间戳?或者它只是算法发现的第一个共同祖先,这将是一个任意的实现细节?

4

1 回答 1

4

这不仅仅是可能的,它在文档中git merge-base提到:

git merge-base找到两个提交之间的最佳共同祖先以在三向合并中使用。如果后者是前者的祖先,则一个共同祖先优于另一个共同祖先。没有任何更好的共同祖先的共同祖先是最佳共同祖先,即合并基础。请注意,一对提交可以有多个合并基础。

[强调我的——我认为强调的句子应该包括“最好”这个词,真的],并且:

...没有一个比另一个更好(两者都是最好的合并基础)。当--all未给出选项时,未指定输出哪个最佳选项。

(这意味着,正如您所建议的,这是一个实现细节)。

于 2015-01-25T06:36:50.170 回答