Я пытаюсь найти источник ошибки, которая возникла после коммита за последний день в долгоживущей ветке (которая будет выпущена намного позже) с именем feature-x .
Хотя есть ошибка.Я нахожу поведение, которого я не ожидаю от моего скрипта, который мог быть введен в любом коммите до сих пор, особенно потому, что функции master интенсивно используются в feature-x, но в меньшей степени на самом Master.
Чтобы проверить это поведение, я должен запустить свой сценарий зависимый.pl.Но когда bisect переходит на полпути вниз по коду, мой сценарий на 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
, ожидая, что смогу найти то, что сломало мой код в зависимом .pl, я в конечном итоге на коммит 'sub f {return2} 'без моей истории изменений из feature-x (то есть, если я запускаю ls
, все, что я вижу, - это main.pl, а файл absolute.pl отсутствует).
Это переводит меня в непроверяемое состояние.Я не могу знать, сломал ли мой текущий коммит мою работу или нет, и не могу сказать, что коммиты на мастере сломали его, поэтому я не могу сказать, что этот коммит хороший или плохой.
Как я могу проверить, что сломало мойтекущая ветка?