二分查找
想必大家都玩过猜数字游戏吧:一个人在1到100的数字中随意选择一个,另外一个人来猜,小孩子总是一个挨着一个地猜, 懂得折半查找的大人总是获胜者。Git 提供的 git bisect 这一命令,就是采用这样的二分查找快速地在提交中定位 Bug, 少则几次,多则十几次就会定位到引入Bug的提交。
首先执行下面命令启用二分查找。
$ git bisect start
标记一个好版本。下面的命令使用 tag(v2.7.0)来标记 Git 2.7.0 版本是好版本,换做40位的提交号也行。
$ git bisect good v2.7.0
标记 Git 2.8.0-rc0 是一个坏版本。注意:马上就是见证奇迹的时刻。
$ git bisect bad v2.8.0-rc0 Bisecting: 297 revisions left to test after this (roughly 8 steps) [563e38491eaee6e02643a22c9503d4f774d6c5be] Fifth batch for 2.8 cycle
看到了么?当完成对一个好版本和一个坏版本的标记后,Git 切换到一个中间版本(
563e384
),并告诉我们大概需要8步可以找到元凶。在这个版本下执行前面的测试操作:
$ make -j8 && make install //编译项目 $ check //测试是否有问题 found error! //发现确实有问题
对这个版本进行标记。
这是一个坏版本:
$ git bisect bad Bisecting: 126 revisions left to test after this (roughly 7 steps) [e572fef9d459497de2bd719747d5625a27c9b41d] Merge branch 'ep/shell-command-substitution-style'
我们可以机械地重复上面4、5的步骤,直到最终定位。但是人工操作很容易出错。如果对版本标记错了,把 good 写成了 bad 或者相反, 就要执行 git bisect reset
重来。(小窍门:git bisect log 可以显示 git bisect 标记操作日志)
转自:点击打开链接