Почему нет? git bisect 'ветка осведомлена?

Я пытаюсь найти источник ошибки, возникшей после фиксации в прошлый день в долгоживущей ветке (которая будет выпущена намного позже) под названием feature-x .

Но есть ошибка. Я обнаружил поведение, которого я не ожидал от своего скрипта, который мог быть введен в любой из коммитов ' s до сих пор, особенно потому, что функции 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 {return 2} 'без моей истории изменений по сравнению с feature-x (т.е. если я запустил ls , все, что я вижу, это main.pl, а зависимый.pl отсутствует).

Это ставит меня в непроверенное состояние . Я не могу знать, сломала ли текущая фиксация мою работу или нет, а также не могу сказать, что фиксация на мастере сломала ее, поэтому я не могу сказать, что эта фиксация хороша или плохая.

Как я могу проверить, что сломало мою текущую ветку?

21
задан Flimzy 18 December 2015 в 10:08
поделиться