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

Ale*_*lex 13 git git-bisect

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

Bisecting: a merge base must be tested
[bbdaf1111eea5365c0c94d6045d6263aab718925] Fix display bug with main-stage
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

luc*_*ash 23

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

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

* dffa2 good-commit
* b38f4 a2
* cc19f a1
| * d1f17 bad-commit
| * fbd1f b2
| * f66cc b1
|/
* 09f66 merge-base-commit
Run Code Online (Sandbox Code Playgroud)

什么"合并基础"的意思

由于消息使用术语"合并基础",因此理解该术语以理解消息可能会有所帮助.两个或多个提交的"合并基础"是最新提交,它是所有提交的父级.

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

理解bisect

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

$ git bisect start
$ git bisect good good-commit
$ git bisect bad bad-commit
Bisecting: a merge base must be tested
[09f66] merge-base-commit
Run Code Online (Sandbox Code Playgroud)

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

good-commit和之间没有引入Bugbad-commit

假设merge-base-commit中存在错误.在这种情况下,将无法找到在良好提交和错误提交之间的差异中引入错误的提交.取而代之的是提交a1,a2good-commit解决了问题,如果你认为合并基础是坏的,那将会发生什么:

$ git bisect bad
The merge base merge-base-commit is bad.
This means the bug has been fixed between 09f66 and [dffa2].
Run Code Online (Sandbox Code Playgroud)

merge-base-commit和之间引入了问题bad-commit

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

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


eft*_*ft0 5

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