如何为一个存储库执行git bisect并转到最新版本导致问题的旧版本?

时间:2012-01-14 09:06:38

标签: linux git svn version-control github

我必须回到旧版本,其中最新版本不起作用。到目前为止,我尝试了以下但令人困惑,因为我看到所有代码仍然是最新的:

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错误中获得了最新版本。 (他   谎称有100多个错误,他只需要我们测试)

第1步:好奇的@ tester

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 个答案:

答案 0 :(得分:1)

首先,确保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似乎很好,只需执行:

git bisect good

在其中任何一种情况下,当您输入这些命令时,git会再次自动将您转移到新版本进行测试。 (如果它将您转移到无法编译的版本或类似的版本,您可以通过执行git bisect skip告诉git选择另一个版本而不将当前版本标记为好或坏。)

基本上,你一直在测试git移动你的新版本,直到它输出一条消息f414f31 is the first bad commit(或类似的东西)。

最后,为了结束二分并将你自己带回到你开始之前的分支/提交,只需这样做:

git bisect reset

(如果出现任何问题,您也可以使用它来中止上述任何一点的二分法,或者您感到困惑。)