考虑下图中分支 B 和 A 的 merge 基础:
A0---------A1--A (topic)
/ \ /
---M0--\--M1--M (master)
\ \ \
B0--B1-----B (int)
下面的 git 命令识别了两个 merge 库,M 和 A0:
$ git merge-base --all B A
但显然 git 认为 merge-base M “最好”,因为下面的命令只返回它:
$ git merge-base B A
是什么让 M 比 A0 更适合 git?我可以看到涉及的 parent 较少,但我没有看到 merge-base 的手册页中提到这种考虑。
最佳答案
这对我来说不是这样,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
编辑:啊,我明白了,你假设在所有最好的 merge 基地中有一些固有的排名,有一些理由在同行中选择一个基地。没有。当您只要求 a merge 基础时,git merge-base
将在寻找共同祖先时选择最先出现的内容。这通常足够好,以至于它是默认行为。
关于git - 为什么 git merge-base 在这种情况下只返回一个提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48775596/