bisect git 使用_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工具有如下的错误提示:[root@jay-linux qemu.git]# git bisect start

# commit-4b274b160 is newer than commit-079944e6.

[root@jay-linux qemu.git]# git bisect good 4b274b160

[root@jay-linux qemu.git]# git bisect bad 079944e6

Some good revs are not ancestor of the bad rev.

git bisect cannot work properly in this case.

Maybe you mistake good and bad revs?

遇到这种情况下,可以换一种思考方式,既然 “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”的用法:[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

Date: Sun Dec 16 04:49:45 2012 +0100

### just for testing. ###

:040000 040000 a9ea5da3b5b85d86701f78608405504e9a4de905 0bb166863c84186202c639aff92dd326f1021d42 M hw

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值