为什么git merge-base在这种情况下只返回一个提交?

时间:2018-02-13 21:03:04

标签: git git-merge

在下面的地图中考虑分支B和A的合并基础:

     A0---------A1--A (topic)
    / \        /
---M0--\--M1--M (master)
    \   \      \
     B0--B1-----B (int)

以下git命令标识两个合并库,M和A0:

$ git merge-base --all B A

但显然git认为merge-base M“最好”,因为以下命令只返回它:

$ git merge-base B A

是什么让M比G0更好?我可以看到涉及的父母较少,但我没有看到合并基础手册页中提到的这种考虑。

1 个答案:

答案 0 :(得分:3)

这不是我发生的事情,该图上的git merge-base --all int topic会产生两种基础。

$ sh -x <<'EOD'
git init merge-base-test;cd $_
doit() { eval $*; git add .;shift $(($#-1)); git commit -m "$1"; }
doit touch M0
doit touch M1
doit touch M
git checkout -b topic :/M0
doit touch A0
git merge master -m A1
doit touch A
git checkout -b int :/M0
doit touch B0
git merge :/A0 -m B1
git merge master -m B
git merge-base --all int topic
EOD

编辑:啊,我知道,你假设在所有最好的合并基础中有一些固有的排名,有一些理由在同行中选择一个基数。没有。当您只要求 一个 合并基础git merge-base时,它会在寻找共同祖先时首先选择显示的内容。这通常足够好,这是默认行为。