Git bisect говорит, что Bisecting: база слияния должна быть проверена

Я сделал bisect git и получил результат

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

Как я могу продолжить?

Ответ 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

Ответ 2

Вам просто нужно сообщить git bisect, если это хорошая фиксация или плохой коммит. "Тест", о котором идет речь, заключается в том, что вы проверяете свой код на наличие ошибки/функции, которую вы пытаетесь найти.

Вы можете сделать

git bisect good

или

git bisect bad

чтобы продолжить.

Ответ 3

Пусть он запускается, это нормально, если есть сливы по пути, который нужно делить пополам.