git工具之使用git调试

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笔提交。

     再重复一次即可准确定位。 

原文地址:https://www.cnblogs.com/junlinqunxia/p/7472183.html