git bisect说Bisecting:必须测试合并基础

31

我进行了Git二分查找并得到了结果

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

我该怎么操作?


4
这只是一条信息性的消息-如果没有这个提示,并且您密切关注期望运行测试的数量,那么您可能会反对它运行的测试数量与其所说的不同。该消息告诉您,根据这个测试的结果,先前的近似值即将被改进。请注意,这并不改变原来的意思。 - torek
3个回答

41
如果给定的好和坏版本不是直接的后代,则会发生这种情况。
让我们假设一个类似于这样的存储库(使用示例名称表示提交):
* 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

二分法是为了找到引入问题(导致状态出现错误)的提交记录,这种情况可能会导致问题:

错误并不是在good-commitbad-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

6

让它运行吧,如果路径上需要分割的部分有合并也是很正常的。


3

您只需要告诉git bisect这是一个好的提交还是坏的提交 - 问题中的“测试”是为了测试您要查找的错误/功能的代码。

您可以进行:

git bisect good

或者

git bisect bad

继续阅读。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接