Я пытаюсь найти источник ошибки, появившейся после фиксации в прошлый день на долговечной ветке (которая будет выпущена намного позже), названной feature-x.
Там есть ошибка. Я нахожу поведение, которого я не ожидаю от своего script, который мог бы быть введен в любой из коммитов до сих пор, особенно потому, что черты master используются сильно в feature-x, но в меньшей степени на самом Мастере.
Чтобы проверить это поведение, мне нужно запустить my script, depend.pl. Но когда bisect прыгает наполовину вниз по коду, мой script не существует на Master, и поэтому его невозможно проверить.
Я считаю, что это связано с тем, что bisect вытаскивает вас в безголовое состояние, но в этом случае я действительно хочу быть в контексте этой другой истории/набора изменений, а не плавать в эфире.
Прежде чем кто-либо скачет, что вы делаете неправильный зуммер, нашей команде нравится слияние ветвей в этих ситуациях, так как метафора хорошо работает для этой ситуации, а не для переустановки.
Я продемонстрирую это, создав образец репо:
git init
echo 'sub f { print $_; }' > main.pl
git add .
git commit -a -m "inital commit"
git branch feature-x
git checkout feature-x
echo 'main::f(1)' > dependent.pl
git add .
git commit -a -m "Starting work on feature X"
git tag dev-1.0
git checkout master
echo "sub f { return 1; }" > main.pl
git commit -a -m "sub f { return 1; }"
echo "sub f { return 2; }" > main.pl
git commit -a -m "sub f { return 2; }"
echo "sub f { return 3; }" > main.pl
git commit -a -m "sub f { return 3; }"
git tag release-1.0
git checkout feature-x
git merge master
echo 'print main::f();' > dependent.pl
git commit -a -m "Updating call to f"
Итак, теперь вы получаете репо, которое выглядит так:
o Updating call to f ( Head of branch 'feature-x' )
o Merge branch master onto feature-x
|\
| o sub f { return 3; } (TAG release-1.0) ( Head of branch 'master' )
| o sub f { return 2; }
| o sub f { return 1; }
o | Starting work on feature X ( TAG 'dev-1.0' )
\|
o initial commit
Итак, я запустил команду git bisect start feature-x dev-1.0
, ожидая, что смогу найти то, что сломало мой код в файле depend.pl, и я заканчиваю на commit 'sub f {return 2}' без моей истории изменений с feature-x (т.е. если я запустил ls
, все, что я вижу, это main.pl и depend.pl отсутствует).
Это ставит меня в непроверенное состояние. Я не могу знать, нарушила ли текущая битка моя работа или нет, и я не могу сказать, что фиксация на хозяине нарушила ее, поэтому я не могу сказать, что это коммит хорошо или плохо.
Как я могу проверить, что сломало мою текущую ветку?