由于修订版可以有多个父母(合并)和多个孩子,因此可以使用最近的共同祖先"暧昧吗?
例如:
A---B--C--D
\ \ /
\ E /
\ / /
F-G
E和D的最新共同祖先可能是B或F.
我尝试用git复制这个,我认为它把B作为共同的祖先。这里有理由选择B超过F吗?也许诉诸时间戳?或者它只是算法发现的第一个共同祖先,这将是一个任意的实现细节?
答案 0 :(得分:4)
它不仅仅是可能的,它在documentation for git merge-base
中提到:
git merge-base 在两次提交之间找到最佳共同祖先,以便在三向合并中使用。一个共同的祖先比另一个共同的祖先更好,如果后者是前者的祖先。没有任何更好的共同祖先的共同祖先是最佳共同祖先,即合并基础。 请注意,一对提交可以有多个合并基础。
[强调我的 - 我认为强调的句子应该包括“#34;最好",真的”这个词,并且:
...两者都不比另一个好(两者都是最佳合并基础)。如果未给出
--all
选项,则未指定哪个最佳输出。
(这意味着,正如您所建议的那样,它是一个实现细节)。