在下面的地图中考虑分支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更好?我可以看到涉及的父母较少,但我没有看到合并基础手册页中提到的这种考虑。
答案 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
时,它会在寻找共同祖先时首先选择显示的内容。这通常足够好,这是默认行为。