bisect是git的一个参数,man里面介绍的是
"Find by binary search the change that introduced a bug."
我们还是用wine来举例子,从wine-1.1.24到wine-1.1.25之间,有303次变更,但是我们不确定是哪次变更导致Baidu HI无法使用了,如果要追查的话,就需要git bisect的帮忙了。
首先执行
git bisect start
命令,然后执行
git bisect good wine-1.1.24
此时,就版本历史就定位到1.1.24和1.1.25中间的那个版本了,如果是提交了303次,应该就是151次或者152次那个版本,这时候如果编译,测试,通过的话,执行git bisect good,版本就变更到151 + (151 / 2),如果没有通过的话,就执行git bisect bad,版本就变更到151 - (151 / 2),完全就是二分查找的过程
如果最终找到了那个出问题的patch,git会给出类似下面的提示
b9f2f9d2265616286eb7a6271852cfdcc121ae90 is first bad commit
commit b9f2f9d2265616286eb7a6271852cfdcc121ae90
Author: Aric Stewart <aric@codeweavers.com>
Date: Tue Jun 23 14:30:38 2009 +0900
wininet: Improve HTTP status 100 handling.
:040000 040000 a071c537a20a37299e6c1da7eab498c749cac58f 6204ea489fac6ceffc4f01464a4b64d24b9bb36f M dlls
"Find by binary search the change that introduced a bug."
我们还是用wine来举例子,从wine-1.1.24到wine-1.1.25之间,有303次变更,但是我们不确定是哪次变更导致Baidu HI无法使用了,如果要追查的话,就需要git bisect的帮忙了。
首先执行
git bisect start
命令,然后执行
git bisect good wine-1.1.24
git bisect bad wine-1.1.25
...
git reset
此时,就版本历史就定位到1.1.24和1.1.25中间的那个版本了,如果是提交了303次,应该就是151次或者152次那个版本,这时候如果编译,测试,通过的话,执行git bisect good,版本就变更到151 + (151 / 2),如果没有通过的话,就执行git bisect bad,版本就变更到151 - (151 / 2),完全就是二分查找的过程
如果最终找到了那个出问题的patch,git会给出类似下面的提示
b9f2f9d2265616286eb7a6271852cfdcc121ae90 is first bad commit
commit b9f2f9d2265616286eb7a6271852cfdcc121ae90
Author: Aric Stewart <aric@codeweavers.com>
Date: Tue Jun 23 14:30:38 2009 +0900
wininet: Improve HTTP status 100 handling.
:040000 040000 a071c537a20a37299e6c1da7eab498c749cac58f 6204ea489fac6ceffc4f01464a4b64d24b9bb36f M dlls
此时只需要执行git bisect reset,然后git show b9f2f9d2265616286eb7a6271852cfdcc121ae90 | patch -p1 -R,去掉这个patch,如果再次编译,测试通过的话,那就OK了,否则的话,可能就需要自己修改一下那个patch,然后提交给作者了
http://hi.baidu.com/leeight/blog/item/36e76960a2ac644deaf8f809.html