我最近尝试使用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?
2条答案
按热度按时间bf1o4zei1#
Git Bisect简介
“git bisect”一开始可能会有点混乱。一旦你明白了它的作用,就很容易了。
“git bisect”的典型场景是:刚刚发现了一个bug。你想找出是哪个牧师引入了这个bug。您知道最新修订版中存在该错误,但它是在之前的修订版中引入的。您需要一种方法来确定bug是否存在。这可以是自动测试,也可以是手动运行的测试。
我们开始吧。从分支机构的最新版本开始,发出:
字符串
然后告诉git当前版本是坏的:
型
现在我们得找个好牧师检查一个足够旧的东西,没有bug。如果你认为32转前应该是好的,那么:
型
然后运行您的测试,看看它是否有bug。如果它有bug,你需要尝试一个更老的版本(只需再次发出“git checkout HEAD~32”)。一旦你找到一个没有bug的rev,那么:
型
这告诉git当前版本是好的。Git会立即检查出介于好的rev和坏的rev之间的rev;你会看到输出,例如:
型
运行测试,并根据测试结果发出以下命令之一:
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引发了所有的问题时,你会得到如下的结果:
型
你当前的rev会在第一次错误提交时出现。
运行git bisect“hands off”
如果你的测试是自动的,那么你可以让git做所有的工作。做你所做的一切开始上面:
型
现在是魔术。您所需要的只是一个测试程序,它返回退出代码“0”表示成功,返回1(例如)表示失败。告诉git你的测试:
型
Git现在将运行测试,使用结果自动执行“git bisect good”或“git bisect bad”。它将继续这样做,直到找到引入bug的提交。你所要做的就是坐下来看。
当你完成
完成后,发出:
型
Git会让你回到起点。
3phpmpom2#
你的尝试失败了,因为你告诉它同一棵树既好又坏。这显然说不通
字符串
因为一个给定的treeish不可能是好的和坏的git只是假设你正在纠正自己。
这里的关键是,如果你没有指定一个树型git,它会假设你指的是当前的那个。
一个更好的方法是首先找到一个commit的treeish,它在哪里工作。那...
型
在那之后,二等分将自动开始运行。您仍然需要与它交互,并告诉它平分提交的状态(或者编写一个脚本来自动执行)。