Как сделать git bisect для одного репозитория и перейти на старую версию, где последняя версия вызывает проблемы? - PullRequest
0 голосов
/ 14 января 2012

Я должен вернуться к старой версии, где последняя версия не работает. До сих пор я пытался следовать, но сбивал с толку, потому что я вижу, что все коды такие же, как последние:

git bisect start
git bisect bad
git biesct good <VERSION OR PACKAGENAME.VERSION.OF.OLD.NUMBER.WHICH.I.THINK.WAS.GOOD>

# NOW CONFUSING.. WHAT I HAVE TO TELL TO JUST USE THAT OLD VERSION? ONLY THE CHECKOUT COMMIT ID?
git checkout <old version commit id>?

Как именно вы это делаете?

Продолжение:

Рекламодатель $ Эй, мы получили последнюю версию в основных ошибках 0. (он солгал, есть сотни ошибок, он просто нуждается в нас, чтобы проверить)

Шаг 1: любопытный @ тестер

tester$ cd /var/tmp
tester$ git clone git://site.com/pizzapasta.git
tester$ ./autogen.sh; make;make install; run;
tester$ # failed 40 bugs found, impossible to use it

Шаг 2: возвращение к старому

tester$ cd /var/tmp/pizzapasta
tester$ git bisect start          # initialize
tester$ git bisect bad            # i marked my master/latest is BAD, i dont like/trust it
                                  # Now i am going to old version
tester$ git bisect good <COMMIT-U-THINK_GOOD> 
tester$ git checkout <COMMIT-ID-THAT-WAS-SHOWN-BY-GOOD>
tester$ ./autogen.sh; make; make install; run;

работает ..... так что старое золото и оно работает

1 Ответ

1 голос
/ 14 января 2012

Во-первых, убедитесь, что вывод git status пуст - если ваша работа не выполнена, это может объяснить, почему вы снова видите тот же код.

Чтобы просмотреть команды, которые вы цитировали, первые две подойдут:

git bisect start
git bisect good

... которые просто говорят, чтобы начать деление пополам, и что текущая версия плохая. Затем, как только вы это сделаете:

git bisect bad <COMMIT-YOU-THINK-IS-GOOD>`

... git будет автоматически перемещать вас в коммит, который находится примерно посередине между коммитами, которые вы отметили как хорошие и плохие. (Значительная часть кода действительно может быть такой же, когда вы находитесь на новом этапе истории.)

(Обратите внимание, что выполнение git bisect bad <COMMIT-YOU-THINK-IS-GOOD> в этот момент эквивалентно выполнению git checkout <COMMIT-YOU-THINK-IS-GOOD> и git bisect bad.)

Все, что вам нужно сделать на этом этапе, это проверить код . Если проблема все еще существует, просто сделайте:

git bisect bad

... или, если выбранная версия, кажется, хорошая, просто сделайте:

git bisect good

В любом из этих случаев, git снова автоматически переместит вас в новую версию для проверки сразу после ввода этих команд. (Если он перемещает вас к версии, которая не компилируется, или к чему-то похожему, вы можете указать git выбрать другую версию, не отмечая текущую версию как хорошую или плохую, выполнив git bisect skip.)

По сути, вы продолжаете тестировать новые версии, в которые вас перебирает git, пока не выведет сообщение, говорящее f414f31 is the first bad commit (или что-то подобное).

Наконец, чтобы завершить деление пополам и вернуться к той ветке / коммиту, в которой вы находились до того, как начали, просто выполните:

git bisect reset

(Вы также можете использовать это для прерывания деления пополам в любой точке выше, если что-то пойдет не так, или вы запутались.)

...