Git usage bisect

当你疯狂coding,不停地提交代码,干得酣畅淋漓的时候,测试人员告诉你,不好意思你所有的feature都没有办法测试,因为最新的几个包都 没有办法工作,你愤怒那,咆哮那,冲到命令行下,运指如飞的敲下命令git log,试图发现究竟是哪个混蛋干得,结果你发现其它的疯子在你提交的时候,也卖力的提交那50,60次,然后你沉默那,你石化那,你陷入哀伤不能自拔。 这个时候,你需要的就是git bisect命令

git log --pretty=oneline

4d1ea14a2233c3aa330ee5a76ce990e4b920d0c5 Merge branch 'W1134' of 10.120.10.101:/home/ckt/work/catch_cd into W1134
5e4091d7a4a93f1145b5c6045831b242fd0f8e0a [Type]     Bug Fix
a76f09620871b34024f6bd6226493ae4a95f5c80 This reverts commit 9083531e58a8445498a1df70e81fa9383e47113d. It seems after change the files related to IPO the cel
7cee00c217111f5ecf6cc661cb45c17c037d6113 Merge branch 'W1134' of 10.120.10.101:/home/ckt/work/catch_cd into W1134
408d8bc68e404abe62e03cd965c6f48047e3af71 [Type]     Bug Fix
70f48149afeac31482aedce98eda7f6a29f9b891     [Type]         Bug Fix
737b66e802c1b706f284b83d285b00f809413d8e [Type]     Bug Fix
9594ec81850ad6c77daa47043bde59a569f48ab8 Merge branch 'W1134' of 10.120.10.101:/home/ckt/work/catch_cd into W1134
9083531e58a8445498a1df70e81fa9383e47113d [Type]     Bug Fix
4389f1eae9eff9fe6ee057676af04366c20ac197 [Type] Bug Fix
a9721f609a754d407fdc990f35156ac14ef4a4c4     [Type]     Bug Fix
3a77bdde643cd6d0749b5eb2022cd86215097a8b [Type] Bug Fix
9abfe752886979180322890ff7c8014ddaee1d67 Merge branch 'W1134' of 10.120.10.101:/home/ckt/work/catch_cd into W1134
adf655d6423ef503be4f69dfb41151a5b1aaac04 [Type] Bug Fix
e774992695326d196fd2e00b4cc30e1756f82442     [Type]     Bug Fix
4fce5febbc72806be19cf7c4707b042b12c9fdf1 [Type] Bug Fix
daf9c58d2e38a91ea38d12f6f30ede565869d47f Merge branch 'W1134' of 10.120.10.101:/home/ckt/work/catch_cd into W1134
6e24ab2f2dbfcf7a76774c32e8a9e2ca9e3be9be [Type]
1169f57da567bababed5f666a1ce19fcac49e846 Merge branch 'W1134' of 10.120.10.101:/home/ckt/work/catch_cd into W1134
2705e6918260d993a68d5175b42238022686cd80 [Type] Bug Fix
3e1bb3974cfcd284e49bdbcc68953336761d2723 Chinese Format to insert fixed bug482
f7acd9f58b14885c1c6d4df4497d20b651cb5f36 Merge branch 'W1134' of 10.120.10.101:/home/ckt/work/catch_cd into W1134
2642184ac6c0be4a10bd405a59f005321ca75286 To keep only one memsicd process in system. -- Gou Runqiang
578dfeae63f38d65a59328bdd7ba5ff6eccb1a0a Merge branch 'W1134' of 10.120.10.101:/home/ckt/work/catch_cd into W1134
5ab3a6b447a05278cd41b1cd52d78f59e3abb5b3 [Type]     Bug Fix

使用方法

要干的事情其实很简单,就是逐个排查commit,发现罪魁祸首!逐个排查,是一件很闹心的事情,比如我有100多个commit,岂不是要做100多次, 要死人的哦。还好二分法出场,是的无所不在的算法,git bisect利用二分法,高效帮您找到问题所在。

我们开始吧:

1.看一下我们的历史

$ git log --pretty=oneline
11916c10051e13c27055228c122e36a22191d0a7 add iomanip
246e1926361b6fe157d82820af332043533ab243 fix bugs
1235436rertrb6fe157d82820af332043533ab243 add new feature
deaea5e6f1d0aab171d1dc82055e226182b92695 add main.cc

假设deaea5e6f1d0aab171d1dc82055e226182b92695 是好的,11916c10051e13c27055228c122e36a22191d0a7 系统crash

2.开启bisect魔法工具

$git bisect start
$git bisect good deaea5e6f1d0aab171d1dc82055e226182b92695 
$git bisect bad 11916c10051e13c27055228c122e36a22191d0a7

系统将制动帮你把rev变到位于good和bad两个commit提交历史中间的一个commit 246e1926361b6fe157d82820af332043533ab243,然后你就make打包测试,验证这个commit是不是祸水

3.继续验证commit

假设246e1926361b6fe157d82820af332043533ab243仍然是坏的,那么执行
$git bisect bad

版本将切换到位于原始设置的good和最新的bad之间的commit,你再make打包测试,验证这个commit是不是祸水,如此反复,直到回 溯到真正引起问题的那个commit,然后你就可以跳到那个倒霉的committer面前,斥责他,殴打TA,但请不要忘记,那个倒霉蛋也可能就是你自 己。

4.结束查找

你揪出那祸水,打完收工,表忘记结束bisect,否则你会郁闷地发现,你最近的工作都不见那,因为你正处在一个过去的rev里面
$git bisect reset
posted @ 2015-09-01 14:24  leerone  Views(255)  Comments(0Edit  收藏  举报