如果给定的好版本和坏版本不是彼此的直接后代,则会发生这种情况。
让我们假设一个这样的存储库(使用提交的示例名称):
* 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 中。在这种情况下,将无法在好提交和坏提交之间找到引入错误的提交。取而代之的是 a1、a2 和 good-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、b2 或bad-commit 中引入的。然后bisect 将在merge-base-commit 和bad-commit 之间继续,在这些提交之间选择提交并测试该提交是否良好:
$ git bisect good
Bisecting: 0 revisions left to test after this (roughly 1 step)
[fbd1f] b2