git bisect says Bisecting: a merge base must be tested
Let it run, it's normal if there are merges on the path that has to be bisected.
This will happen if the given good and bad revision are not direct descendants of each other.
Let's assume a repository like this (using exemplary names for the commits):
* dffa2 good-commit
* b38f4 a2
* cc19f a1
| * d1f17 bad-commit
| * fbd1f b2
| * f66cc b1
|/
* 09f66 merge-base-commit
What "merge base" means
As the message uses the term "merge base", it might be helpful to understand that term to understand the message. A "merge base" of two or more commits is the latest commit which is a parent of all of those commits.
Therefore if those commits would be merged, all changes between the "merge base" and those commits will be merged together. Every commit which is a parent of "merge base" is not relevant to the merge, it already is a parent of all involved commits.
Understanding the bisect
The described message will happen in a case like this:
$ git bisect start
$ git bisect good good-commit
$ git bisect bad bad-commit
Bisecting: a merge base must be tested
[09f66] merge-base-commit
What bisecting does is to find the commit which introduced a problem (leading to a bad
state), which in this case could lead to a problem:
Bug was not introduced between good-commit
and bad-commit
Assume that the error existed in merge-base-commit. In this case it will not be possible to find the commit that introduced the bug in the difference between good-commit and bad-commit. Instead one of the commits a1
, a2
and good-commit
solves the problem, which is exactly what will happen if you decide the merge base to be bad:
$ git bisect bad
The merge base merge-base-commit is bad.
This means the bug has been fixed between 09f66 and [dffa2].
Problem was introduced between merge-base-commit
and bad-commit
On the other hand if the merge base is good, the problem was introduced in b1
, b2
or bad-commit
. bisect
will then continue between merge-base-commit
and bad-commit
, picking the commit in the middle between those commits and testing if that one is good:
$ git bisect good
Bisecting: 0 revisions left to test after this (roughly 1 step)
[fbd1f] b2
You just need to tell git bisect
if this is a good commit or a bad commit - the "test" in question is you testing your code for the bug/feature you are trying to find.
You can do
git bisect good
or
git bisect bad
to continue.