GIT中的二分查找(GIT BISECT)
程序员文章站
2022-06-05 13:53:37
...
用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工具有如下的错误提示:
当有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 <just for fun> Date: Sun Dec 16 04:49:45 2012 +0100 ### just for testing. ### :040000 040000 a9ea5da3b5b85d86701f78608405504e9a4de905 0bb166863c84186202c639aff92dd326f1021d42 M hw
上一篇: php实现约瑟夫问题的方法小结
下一篇: Oracle 数据库多表插入详解
推荐阅读
-
Eclipse中本地的git工程怎么导入?
-
解决eclipse中egit中的cannot open git-upload-pack问题
-
.NET Corek中Git的常用命令及实战演练
-
详解git中配置的.gitignore不生效的解决办法
-
Python查找数组中数值和下标相等的元素示例【二分查找】
-
eclipse怎么新建git分支? eclipse中git创建分支的方法
-
解决eclipse中egit中的cannot open git-upload-pack问题
-
Eclipse中本地的git工程怎么导入?
-
Git如何删除历史记录中的大文件详解
-
在 Shell 提示符中显示 Git 分支名称的方法