GIT界的神探--bisect
2015-07-13 16:25
218 查看
GIT界的神探--bisect
今天我们需要使用git命令中的bisect破获一起凶杀案,下面请看具体案件:在一个git仓库中有a,b,c,d,e,f,g,h,i,j,k这几个提交,在k提交中发现软件功能F是可以正常工作的,但是在最新的a提交上F已经无法工作(被谋杀了)。
在提交数较少的情况下可以挨个reset看看,但提交数较多的情况下即使人工使用二分法查找也是相当消耗时间的。接下来看看bisect如何工作的吧。
基本用法
start, bad, good
1.git bisect start开始使用bisect查找
2.git bisect bad HEAD
设置HEAD为已知坏版本
3.git bisect good 89d6e8347c94a26f6f60cc8eeff287ba51c6144c(k提交对应的ID)
设置k提交为已知好版本
当运行完上述三条命令后,会看到如下内容
zhangql0102@njvnc1:~/bisect$ git bisect start
zhangql0102@njvnc1:~/bisect$ git bisect bad HEAD
zhangql0102@njvnc1:~/bisect$ git bisect good 89d6e8347c94a26f6f60cc8eeff287ba51c6144c
Bisecting: 4 revisions left to test after this (roughly 2 steps)
[61c2c497a506cfeb310867e108858b882a9e86ff] f
zhangql0102@njvnc1:~/bisect$
89d6e8347c94a26f6f60cc8eeff287ba51c6144c表示k提交对应的提交ID。
接着bisect会将你的git提交reset到HEAD和k的中间版本f,此时只需要去编译软件验证功能是否OK就行,如OK,输入
git bisect good,bisect会继续将git提交reset到f和HEAD的中间版本。如功能不OK,输入
git bisect bad,bisect则会将git提交reset到f和k的中间版本。
重复上述步骤直到只剩下最后一个提交为止。
扩展用法
git bisect reset
在进行了bisect查找后git仓库中的提交肯定不是原始提交,所以git bisect reset可以将当前仓库恢复到开始bisect之前的提交。
git bisect reset <commit>
在进行完bisect查找后将git仓库停留在对应的提交位置git bisect visualize
使用gitk查看当前bisect过程中剩余的提交信息
git bisect log
查看当前使用bisect的记录,如git bisect start
# bad: [6d1da8180273782d049326014dc248611d7fa8f4] j
git bisect bad 6d1da8180273782d049326014dc248611d7fa8f4
# good: [89d6e8347c94a26f6f60cc8eeff287ba51c6144c] k
git bisect good 89d6e8347c94a26f6f60cc8eeff287ba51c6144c
git bisect reply
当本该运行git bisect good的却运行成了git bisect bad,此时需要使用上面的git bisect log将历史操作记录保存为文件A修改文件中的操作记录然后运行
git bisect reset,最后运行
git bisect reply A就可以了。
基本上掌握了以上几种用法就可以应付了,更多更完整的用法读者可以使用git bisect --help
查看。
相关文章推荐
- CentOS 6图形界面自定义开启终端快捷键
- truncate table
- Android网络编程之Http请求服务器数据(GET方式)
- genymotion报出unable to connect to virtual device的解决方法
- 1139_My Summary
- Android PullToRefresh 实战(ListView)
- Less
- 实现数字转换RMB大写~
- static类型指针使用中的问题(AVPicture 类型内存释放)
- linux SWIG C++转换为JAVA
- 如何提高程序效率
- HDU 1166 (敌兵布阵)
- pthread_create()
- addStretch 布局平均分配空间
- Leetcode47: Palindrome Linked List
- VS 演进
- 图像相似度算法--SIFT算法详解
- 模拟登陆
- NSstring封装
- 初识Nginx,简单配置实现负载均衡(ubuntu + Nginx + tomcat)