注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Code@Pig Home

喜欢背着一袋Code傻笑的Pig .. 忧美.欢笑.记忆.忘却 .之. 角落

 
 
 

日志

 
 

[git] 查找出错的版本号 (git bitsect/blame)  

2013-04-04 11:13:25|  分类: scm_git |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
创建测试仓库

$ git init
$ echo "one" >> foo.txt
$ git add foo.txt
$ git commit -m "first"
$ echo "two" >> foo.txt
$ git commit -a -m "second"
$ echo "three" >> foo.txt
$ git commit -a -m "third"
$ echo "four" >> foo.txt
$ git commit -a -m "last"


git bisect
实际项目中,经常需要定位某个bug是由哪次提交导致的。
一般的做法,就是先找到一个没bug的版本,然后二分查找,找到出问题的版本。svn 中这需要手工操作,而 git 内建支持之。

用 git bisect start 开始二分查找模式。然后立即设置 bisect good/bisect bad 告诉 git 一个二分查找的范围。
之后 git 会告诉你,还剩几个版本需要检查,并自动 checkout 到当前范围的中间版本。如下:

$ git log --pretty=oneline
9e50da3b7a0b066691ec78cc8798fddf6e261654 last
587a5c349ba31d3e6784c7bfc93a12a497c12a94 third
320724f26a30081c7a0489d291f0d65c1b30edf5 second
701c9c75354745b885942f9cd259cb36e1cc2fd9 first
$ git bisect start
$ git bisect bad HEAD
$ git bisect good 701c9c75354745b885942f9cd259cb36e1cc2fd9
Bisecting: 0 revisions left to test after this (roughly 1 step)
[587a5c349ba31d3e6784c7bfc93a12a497c12a94] third

我们说 last 是错的,但 first 是好的。然后 git 自动切到了 third。
我们只需要告诉 git 此 third 版本是好是坏,就完成定位了。

$ git bisect good
9e50da3b7a0b066691ec78cc8798fddf6e261654 is the first bad commit
$ git bisect reset
Previous HEAD position was 587a5c3... third
Switched to branch 'master'

如上,third 是好的话。则 git 告诉我们 last 的那次提交导致了bug。
最后,git bisect reset 我们回到正常开发模式。

git blame
blame 可以查看某个文件中,每一行代码,都是由哪位开发者提交的。

$ git blame foo.txt 
^701c9c7 (kasicass 2013-04-04 10:40:54 +0800 1) one
320724f2 (kasicass 2013-04-04 10:41:14 +0800 2) two
587a5c34 (kasicass 2013-04-04 10:41:47 +0800 3) three
9e50da3b (kasicass 2013-04-04 10:42:02 +0800 4) four


git log -S"xxx"
git 还有个查问题的利器,可以通过 log -S 参数,查看此文件,包含"xxx"内容的行,哪些版本修改过。

$ git log -S"two"
commit 320724f26a30081c7a0489d291f0d65c1b30edf5
Author: kasicass <kasicass@gmail.com>
Date:   Thu Apr 4 10:41:14 2013 +0800

    second

  评论这张
 
阅读(4722)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017