git 二分查找 (git bisect)

转载自: http://smilejay.com/2013/01/git-bisect/


git中的二分查找(git bisect)

用git管理的代码仓库,如果发现引入的新的bug,则可以使用 “git bisect” 来进行二分查找,从而定位是到引入bug的commit。这也特别是Linux、KVM、QEMU等开源社区中大家最常用的方法。
当有bug被fix时,也可以同样使用”git bisect”来二分查找fix了这个bug的commit。不过,由于”git bisect”最初是用于寻找引入bug的坏点而不是fix bug的好点,故在使用”git bisect”寻找修复bug的点时,可能会遇到GIT工具有如下的错误提示:

遇到这种情况下,可以换一种思考方式,既然 “git bisect” 仅适用于将较新的commit标记为bad,而将较旧的标记为good,那么我们可以“将我们认为是good的点标记为bad,是bad的点标记为good”,然后找到最后的“the first bad commit”其实就似乎fix某个bug的“the first good commit”。
真的,稍微换一下思维方式就能解决这种问题了,再次体会到“think out of the box”的重要性。

下面是已qemu.git为例来演示一下“git bisect”的用法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
[ root @ jay - linux qemu . git ] # git bisect reset
Already on 'master'
[ root @ jay - linux qemu . git ] # git bisect start
[ root @ jay - linux qemu . git ] # git bisect good 079944e6
[ root @ jay - linux qemu . git ] # git bisect bad 4b274b16
Bisecting : 55 revisions left to test after this ( roughly 6 steps )
[ 83f58e570f21c3e7227e7fbef1fc0e18b5ed7ea9 ] rtl8139 : preserve link state across device reset
[ root @ jay - linux qemu . git ] # git bisect good
Bisecting : 27 revisions left to test after this ( roughly 5 steps )
[ 4a4343671e183824a3f5db76ad561ce01e6c6e0a ] usb / ehci : Move capsbase and opregbase into SysBus EHCI class
[ root @ jay - linux qemu . git ] # git bisect good
Bisecting : 13 revisions left to test after this ( roughly 4 steps )
[ 507066f8a9610c0088df19ce7b3e436f43165ec1 ] qdev : Include qdev code into * - user , too
[ root @ jay - linux qemu . git ] # git bisect bad
Bisecting : 8 revisions left to test after this ( roughly 3 steps )
[ c3dd94b129e222e00a4ed00689e11afdd85c740f ] Merge remote - tracking branch 'stefanha/net' into staging
[ root @ jay - linux qemu . git ] # git bisect good
Bisecting : 4 revisions left to test after this ( roughly 2 steps )
[ 89eb147c2cfd2c797d3662aa2f55254441f0595a ] uhci : stop using portio lists
[ root @ jay - linux qemu . git ] # git bisect bad
Bisecting : 1 revision left to test after this ( roughly 1 step )
[ 358d615b6908b4916c74819ffad823cb4a74314e ] exynos4210 : Add EHCI support
[ root @ jay - linux qemu . git ] # git bisect bad
Bisecting : 0 revisions left to test after this ( roughly 0 steps )
[ aee7499a59d6778c10b018da41db4a22655ef8a8 ] usb / ehci : Add SysBus EHCI device for Exynos4210
[ root @ jay - linux qemu . git ] # git bisect bad
aee7499a59d6778c10b018da41db4a22655ef8a8 is the first bad commit
commit aee7499a59d6778c10b018da41db4a22655ef8a8
Author : Jay < just for fun >
Date :    Sun Dec 16 04 : 49 : 45 2012 + 0100
### just for testing.  ###
 
: 040000 040000 a9ea5da3b5b85d86701f78608405504e9a4de905 0bb166863c84186202c639aff92dd326f1021d42 M        hw

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值