首页 > 解决方案 > git merge-base --fork-point什么也没产生

问题描述

我在功能分支上运行它:

git fetch origin
git merge-base --fork-point origin/dev; echo $?

git merge-base命令以 1 退出,但标准输出/标准错误记录为零。

我无法弄清楚为什么该merge-base命令不会产生参考,有人知道为什么会发生这种情况吗?

标签: gitgit-merge

解决方案


torek提到的警告是git merge-basefork-point mode 讨论的一部分。

         o---B2
        /
---o---o---B1--o---o---o---B (origin/master)
    \                   \
     B0                  D0'--D1'--D' (topic - updated)
      \
       D0---D1---D (topic - old)

需要注意的是,存储库中较旧的 reflog 条目可能会过期git gc
如果B0不再出现在 remote-tracking 分支的 reflog 中origin/master,则--fork-pointmode 显然找不到它而失败,避免给出随机无用的结果(如 B0 的 parent,就像没有--fork-point选项给出的相同命令一样)。

此外,您使用该--fork-point模式的远程跟踪分支必须是您的主题从其 tip 分支的分支
如果您从比提示更早的提交中分叉,则此模式将找不到分叉点(想象在上面的示例历史记录B0中不存在,origin/master开始于,B1移动到B2然后B,然后您topicorigin/master^何时分叉; history 将与上面相同,没有,并且父级是正确找到的,但模式不会,因为它不是曾经位于) 尖端的提交之一。origin/masterB1B0B1git merge-base origin/master topic--fork-pointorigin/master

您可以看到在此线程git merge-base --fork-point中不起作用的其他场景。这个补丁系列说明了当前的文档。


推荐阅读