Ответ 1
Это произойдет, если данная хорошая и плохая редакция не являются прямыми потомками друг друга.
Давайте предположим, что репозиторий выглядит следующим образом (используя примерные имена для коммитов):
* 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. В этом случае будет невозможно найти коммит, который привел к ошибке, в разнице между good-commit и bad-commit. Вместо этого один из good-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