23

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

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

我该如何进行?

4

3 回答 3

34

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

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

* 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-commit和之间没有引入错误bad-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-commit和之间bad-commit

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

$ git bisect good
Bisecting: 0 revisions left to test after this (roughly 1 step)
[fbd1f] b2
于 2017-07-14T21:36:21.827 回答
4

让它运行,如果在必须平分的路径上有合并,这是正常的。

于 2017-07-14T16:18:28.757 回答
2

您只需要判断git bisect这是一个好的提交还是一个坏的提交 - 有问题的“测试”是您测试您的代码以查找您要查找的错误/功能。

你可以做

git bisect good

或者

git bisect bad

接着说。

于 2017-07-14T16:18:18.147 回答