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

标签 git git-merge

考虑下图中分支 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/

相关文章:

git - 如何在同一个 git 分支中恢复旧功能?

git - merge 到git中的分支而不切换到它

GIT 2 个或多个 merge 冲突在单个文件中 - p4merge 如何处理?

git - 当两个分支不同但两个分支中都没有新提交时,为什么 git merge 不更改?

git-svn dcommit 失败,原因为 "URL access forbidden for unknown reason"

git - PhpStorm Git 文件夹修改颜色

git - 如何恢复当前 git 提交的文件

ruby-on-rails - 使用 active_admin 进行 Heroku 部署

linux - Gitea无法获取存储库

Git 忽略剩余的 merge 冲突