git bisect 表示二等分:必须测试合并基础

git bisect says Bisecting: a merge base must be tested

我做了一个git平分得到了结果

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

我该如何继续?

您只需要告诉 git bisect 这是一个好的提交还是一个坏的提交 - 有问题的 "test" 是您针对您正在尝试的 bug/feature 测试您的代码找到。

你可以做到

git bisect good

git bisect bad

继续。

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

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

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

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

"merge base" 是什么意思

由于邮件使用了术语 "merge base",因此理解该术语可能有助于理解邮件。两个或多个提交的 "merge base" 是最新提交,它是所有这些提交的父项。

因此,如果要合并这些提交,则 "merge base" 和那些提交之间的所有更改都将合并在一起。作为 "merge base" 父级的每个提交与合并无关,它已经是所有相关提交的父级。

理解平分

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

$ 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。在这种情况下,将无法在 good-commit 和 bad-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