GIT界的神探--bisect
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查看。
GIT界的神探--bisect的更多相关文章
- git help 机器翻译
该篇发布仅为博主个人保存并参考,内容可能不对 usage: git [--version] [--help] [-C <path>] [-c <name>=<value& ...
- 常见的 Git 命令:
开始一个工作区(参见:git help tutorial) clone 克隆一个仓库到一个新目录 init 创建一个空的 Git 仓库或重新初始化一个已存在的仓库 在当前变更上工作(参见:git he ...
- Git分布式版本控制系统(上)
Git分布式版本控制系统(上) 链接:https://pan.baidu.com/s/1CgaEv12cwfbs5RxcNpxdAg 提取码:fytm 复制这段内容后打开百度网盘手机App,操作更方便 ...
- 在Ubuntu 18.04上安装Git
步骤1.首先,通过运行以下命令确保您的系统和apt包列表完全更新: apt-get update -yapt-get upgrade -y 第2步.在Ubuntu 18.04上安装Git. 现在让我们 ...
- Git基本操作流程
技术背景 Gitee是一款国内的git托管服务,对于国内用户较为友好,用户可以访问Gitee地址来创建自己的帐号和项目,并托管在Gitee平台上.既然是git的托管服务,那我们就可以先看看git的一些 ...
- 如何在Ubuntu 18.04安装Git
在Ubuntu 18.04安装Git 更新apt包列表 apt-get update -y apt-get upgrade -y 安装Git: apt install git 检查Git版本 git ...
- Linux 使用 github 常用命令
Linux 使用 github 常用命令 今天整理一下常用的 github 命令,自己只是一个编程小白,有些地方可能做的不是很好,仅仅用作自己的学习使用. 创建一个文件夹用于存放github仓库 m ...
- 查找问题的利器 - Git Bisect
原文:http://gitbook.liuhui998.com/5_4.html 假设你在项目的'2.6.18'版上面工作, 但是你当前的代码(master)崩溃(crash)了. 有时解决这种问题的 ...
- [Practical Git] Diagnose which commit broke something with git bisect
Sometimes you find a bug in your project that has been around for a while without being noticed; it ...
随机推荐
- Python -面向对象(一 基本概念)
一 Python简单介绍 Python是一个可移植的面向对象的脚本语言. Python尽管是一个脚本语言,但也是一个全然面向对象的语言.由于它设计之初把易用性做为很重要的一个考量标准,所以用起来很简洁 ...
- 重写spring cloud config 本地bootstrap
在spring-cloud中使用了config-server之后,需要在client端加入bootstrap作为配置文件,其中通常包含如下: spring.application.name=ms-as ...
- SVN服务器更改ip地址客户端怎么设置(转载)
SVN 服务器 IP 地址修改后,客户端对服务器的连接可以采用以下的方法重定位: 1. 如果客户端工具是TortoiseSVN,直接在工作副本上右键,选择TortoiseSVN->relocat ...
- 网络结构----ISO/OSI七层网络模型和TCP/IP四层网络模型
对等实体在一次交互作用中传送的信息单位称为协议数据单元.它包含控制信息和用户数据两部分. 上下层实体之间的接口称为服务訪问点. ISO/OSI參考模型分为:物理层.数据链路层.网络层.传输层.会话层. ...
- 如何卸载Mysql
mysql安装的时候会出现各种问题,尤其对新手,卸载不干净,重新安装会受到影响.也不能有点问题就重装系统吧!现在提供一种通过删除注册表的方式卸载mysql! 运行regedit打开注册表,搜索mysq ...
- ERROR C2676
直接上代码: nl.h #ifndef NL_H #define NL_H #include <iosfwd> namespace ZJ { /** Insert a newline ch ...
- JQuery EasyUI datagrid pageNumber 分页 请求/加载 两次
解决方案: 原因是 jquery.easyui.min.js 源文件中,由于第1页的total和其他页的total不相等,EasyUI会重新发起第1页的请求!1.jQuery EasyUI 1.4.1 ...
- Errors occurred while updating the change sets for SVNStatusSubscriber org.apache.subversion.javahl.
原因:eclipse-svn插件版本过低,导致不能识别svn客户端中的代码,从而报错 解决方法: 1.点击“Help”下拉菜单中的“Eclipse Marketplace”, 2.在弹出的窗口中,点击 ...
- Java中的BlockingQueue小结
BlockingQueue是java.util.concurrent下的主要用来控制线程同步的工具. 主要的方法是:put.take一对阻塞存取:add.poll一对非阻塞存取. 插入: 1) add ...
- linux查看硬盘空间 文件大小
du,disk usage,是通过搜索文件来计算每个文件的大小然后累加,du能看到的文件只是一些当前存在的,没有被删除的.他计算的大小就是当前他认为存在的所有文件大小的累加和 df,disk free ...