GIT提供一些工具来帮助你调试项目中遇到的问题
文件标注
你在追踪代码缺陷想知道是谁在什么时候引入了缺陷代码。文件标注工具能用来显示文件中对每一行进行修改的最近一次提交。
1.$git blame -L 12,22 file1.java
^4832fe2 (xiao.fan 2017-08-21 10:31:28 -0700 12) def show(tree = 'master')
^4832fe2 (xiao.fan 2017-08-21 10:31:28 -0700 13) command("git show #{tree}")
9f6560e4 (xiao.fan 2017-08-21 21:52:20 -0700 16) def log(tree = 'master')
注:-L选项指定文件输出行范围;第一个域是最近一次修改该行的那次提交的hash值;第二个域是修改作者及时间;第三个域是具体行内容。
2.如果一个文件是内容是从不同文件里copy过来的,那么git也能找到原始出处。加上-C选项即可。
$ git blame -C -L 141,153 file1.java
f344f58d file2.java (xiao.fan 2017-08-21 141)
ad11ac80 file3.java (xiao.fan 2017-08-21 142)
ad11ac80 file1.java (xiao.fan 2017-08-21 143) NSString *parentSha;
f344f58d file1.java (xiao.fan 2017-08-21 144) {
70befddd file4.java (xiao.fan 2017-08-21 145) //NSLog(@"GATHER COMMI
二分查找
现在遇到一种情况:今天团队提交了上百次提交,发现最新产品的版本有问题又找不到原因,你想确定哪一次提交引入的bug。此时二分查找就派上用场了。
1. git bisect start启动二分查找工具
2. git bisect bad 告诉二分工具目前版本有问题
3. git bisect good f344f58d 告诉二分工具此提交的版本是好的------git 发现在HEAD与 f344f58d 之间有12笔提交(为了讲解方便假定有12笔提交),于是他检出到第6笔提交。
如果测试此版本有问题,那么告诉git bisect bad,git会检出前6笔提交的中间,即第3笔提交;如果测试此版本无问题,那么告诉git bisect good,git会检出后6笔提交的中间,即第9笔提交。
继续测试,这次如果告诉git bisect good,则检出到第5笔提交;如果是git bisect bad,则检出到第2笔提交。
再重复一次即可准确定位。