【问题标题】:git bisect says Bisecting: a merge base must be testedgit bisect 说 Bisecting:必须测试合并基础
【发布时间】:2017-12-19 19:44:18
【问题描述】:

我做了一个 git bisect 并得到了结果

Bisecting: a merge base must be tested
[bbdaf1111eea5365c0c94d6045d6263aab718925] Fix display bug with main-stage

我该如何继续?

【问题讨论】:

  • 这只是一条信息性消息 - 如果它没有这么说,并且您密切关注要运行的预期测试的数量,您可能会反对它运行的测试数量与它不同说它必须。此消息告诉您,基于此测试的任何结果,将要改进较早的近似值。

标签: git git-bisect


【解决方案1】:

如果给定的好版本和坏版本不是彼此的直接后代,则会发生这种情况。

让我们假设一个这样的存储库(使用提交的示例名称):

* dffa2 good-commit
* b38f4 a2
* cc19f a1
| * d1f17 bad-commit
| * fbd1f b2
| * f66cc b1
|/
* 09f66 merge-base-commit

什么是“合并基础”

由于消息使用术语“合并基础”,理解该术语可能有助于理解消息。两个或多个提交的“合并基础”是所有这些提交的父级的最新提交。

因此,如果要合并这些提交,则“合并基础”和这些提交之间的所有更改都将合并在一起。作为“合并基础”的父级的每个提交都与合并无关,它已经是所有涉及的提交的父级。

理解二分法

所描述的消息将在这样的情况下发生:

$ git bisect start
$ git bisect good good-commit
$ git bisect bad bad-commit
Bisecting: a merge base must be tested
[09f66] merge-base-commit

二分法的作用是找到引入问题的提交(导致bad 状态),在这种情况下可能会导致问题:

good-commitbad-commit 之间没有引入错误

假设错误存在于 merge-base-commit 中。在这种情况下,将无法在好提交和坏提交之间找到引入错误的提交。取而代之的是 a1a2good-commit 提交之一解决了问题,如果您认为合并基础不好,这正是会发生的情况:

$ git bisect bad
The merge base merge-base-commit is bad.
This means the bug has been fixed between 09f66 and [dffa2].

merge-base-commitbad-commit 之间引入了问题

另一方面,如果合并基础良好,则问题是在b1b2bad-commit 中引入的。然后bisect 将在merge-base-commitbad-commit 之间继续,在这些提交之间选择提交并测试该提交是否良好:

$ git bisect good
Bisecting: 0 revisions left to test after this (roughly 1 step)
[fbd1f] b2

【讨论】:

    【解决方案2】:

    让它运行,如果路径上有合并,那是正常的。

    【讨论】:

      【解决方案3】:

      你只需要告诉git bisect这是一个好的提交还是一个坏的提交 - 有问题的“测试”是你测试你的代码是否有你试图找到的错误/功能。

      你可以的

      git bisect good
      

      git bisect bad
      

      继续。

      【讨论】:

        猜你喜欢
        • 2013-06-20
        • 1970-01-01
        • 2015-05-31
        • 1970-01-01
        • 2020-07-26
        • 2012-01-19
        • 1970-01-01
        • 1970-01-01
        • 2012-09-10
        相关资源
        最近更新 更多