git bisect不返回任何输出

yhxst69z  于 2023-08-01  发布在  Git
关注(0)|答案(2)|浏览(82)

我最近尝试使用git bisect,但它就是不工作。树仍然保留在master中,我没有看到git bisect的任何输出。以下是我尝试过的:

git bisect start
git bisect bad   # no output, tried a couple of times
git bisect good  # no output
git bisect reset #-> Already on 'master'

字符串
我在两个不同的回收站试过这个。没成功git --version is 1.6.3.3 on Ubuntu 9.10 Any ideas?

bf1o4zei

bf1o4zei1#

Git Bisect简介

“git bisect”一开始可能会有点混乱。一旦你明白了它的作用,就很容易了。
“git bisect”的典型场景是:刚刚发现了一个bug。你想找出是哪个牧师引入了这个bug。您知道最新修订版中存在该错误,但它是在之前的修订版中引入的。您需要一种方法来确定bug是否存在。这可以是自动测试,也可以是手动运行的测试。
我们开始吧。从分支机构的最新版本开始,发出:

git bisect start

字符串
然后告诉git当前版本是坏的:

git bisect bad


现在我们得找个好牧师检查一个足够旧的东西,没有bug。如果你认为32转前应该是好的,那么:

git checkout HEAD~32


然后运行您的测试,看看它是否有bug。如果它有bug,你需要尝试一个更老的版本(只需再次发出“git checkout HEAD~32”)。一旦你找到一个没有bug的rev,那么:

git bisect good


这告诉git当前版本是好的。Git会立即检查出介于好的rev和坏的rev之间的rev;你会看到输出,例如:

$ git bisect good
Bisecting: 7 revisions left to test after this (roughly 3 steps)
[909ba8cd7698720d00b2d10738f6d970a8955be4] Added convenience delegators to Cache


运行测试,并根据测试结果发出以下命令之一:

  • 第一个月
  • git bisect bad # the test failed
  • git bisect skip # we can't run the test on this rev for some reason (doesn't compile, etc.)

Git将继续改变不同的转速,你会不断告诉它好,坏或跳过。当git最终找出是哪个rev引发了所有的问题时,你会得到如下的结果:

b25ab3cee963f4738264c9c9b5a8d1a344a94623 is the first bad commit
commit b25ab3cee963f4738264c9c9b5a8d1a344a94623
Author: Wayne Conrad <wconrad@yagni.com>
Date:   Fri Dec 25 18:20:54 2009 -0700

    More tests and refactoring

:040000 040000 6ff7502d5828598af55c7517fd9626ba019b16aa 39f346cb5a289cdb0955fcbba552f40e704b7e65 M      routecalc


你当前的rev会在第一次错误提交时出现。

运行git bisect“hands off”

如果你的测试是自动的,那么你可以让git做所有的工作。做你所做的一切开始上面:

git bisect start
git bisect bad
git checkout HEAD~32    # or however far back it takes to find a good rev
git bisect good


现在是魔术。您所需要的只是一个测试程序,它返回退出代码“0”表示成功,返回1(例如)表示失败。告诉git你的测试:

git bisect run tests/mytest.rb


Git现在将运行测试,使用结果自动执行“git bisect good”或“git bisect bad”。它将继续这样做,直到找到引入bug的提交。你所要做的就是坐下来看。

当你完成

完成后,发出:

git bisect reset


Git会让你回到起点。

3phpmpom

3phpmpom2#

你的尝试失败了,因为你告诉它同一棵树既好又坏。这显然说不通

git bisect start # tells git you want to do a bisect operation
git bisect bad # tells git the current treesh (HEAD) is bad
git bisect good # tells git the current treeish (HEAD) is good

字符串
因为一个给定的treeish不可能是好的和坏的git只是假设你正在纠正自己。
这里的关键是,如果你没有指定一个树型git,它会假设你指的是当前的那个。
一个更好的方法是首先找到一个commit的treeish,它在哪里工作。那...

git bisect start
git bisect bad # tells it HEAD is bad
git bisect good abc123 # treeish of the good commit


在那之后,二等分将自动开始运行。您仍然需要与它交互,并告诉它平分提交的状态(或者编写一个脚本来自动执行)。

相关问题