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的更多相关文章

  1. git help 机器翻译

    该篇发布仅为博主个人保存并参考,内容可能不对 usage: git [--version] [--help] [-C <path>] [-c <name>=<value& ...

  2. 常见的 Git 命令:

    开始一个工作区(参见:git help tutorial) clone 克隆一个仓库到一个新目录 init 创建一个空的 Git 仓库或重新初始化一个已存在的仓库 在当前变更上工作(参见:git he ...

  3. Git分布式版本控制系统(上)

    Git分布式版本控制系统(上) 链接:https://pan.baidu.com/s/1CgaEv12cwfbs5RxcNpxdAg 提取码:fytm 复制这段内容后打开百度网盘手机App,操作更方便 ...

  4. 在Ubuntu 18.04上安装Git

    步骤1.首先,通过运行以下命令确保您的系统和apt包列表完全更新: apt-get update -yapt-get upgrade -y 第2步.在Ubuntu 18.04上安装Git. 现在让我们 ...

  5. Git基本操作流程

    技术背景 Gitee是一款国内的git托管服务,对于国内用户较为友好,用户可以访问Gitee地址来创建自己的帐号和项目,并托管在Gitee平台上.既然是git的托管服务,那我们就可以先看看git的一些 ...

  6. 如何在Ubuntu 18.04安装Git

    在Ubuntu 18.04安装Git 更新apt包列表 apt-get update -y apt-get upgrade -y 安装Git: apt install git 检查Git版本 git ...

  7. Linux 使用 github 常用命令

    Linux 使用 github  常用命令 今天整理一下常用的 github 命令,自己只是一个编程小白,有些地方可能做的不是很好,仅仅用作自己的学习使用. 创建一个文件夹用于存放github仓库 m ...

  8. 查找问题的利器 - Git Bisect

    原文:http://gitbook.liuhui998.com/5_4.html 假设你在项目的'2.6.18'版上面工作, 但是你当前的代码(master)崩溃(crash)了. 有时解决这种问题的 ...

  9. [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 ...

随机推荐

  1. 聚合类新闻client的改进

         zaker和鲜果是最早的聚合类新闻产品.前几年发展非常快.迅速占据了市场,但近两年发展变得缓慢.而今日头条自公布以来才两年.用户量就迅速超过了zaker和鲜果.使用起来非常easy,左右滑动 ...

  2. NoSQL(三)

    redis集群介绍 1.官方叫cluster,redis3.0才直接的一个架构,如果数据量很大,单台机器已经无法满足存储,查询的瓶颈,所以我们需要多台机器构成一个大集群,用来解决存储空间,查询速度,负 ...

  3. hdu1010Tempter of the Bone(dfs+奇偶剪枝)

    题目链接:pid=1010">点击打开链接 题目描写叙述:给定一个迷宫,给一个起点和一个终点.问是否能恰好经过T步到达终点?每一个格子不能反复走 解题思路:dfs+剪枝 剪枝1:奇偶剪 ...

  4. EF检索中文失败的解决办法

    1. MYSQL: 保证所有的的列都是UTF8格式. 2. VS2010: 在data server建立连接时,选择advance,将chracterset设成utf8,这样在VS2010里查看和更改 ...

  5. 获取表单select域的选择部分的文本

    body> <form action="index.php"> <select name="" id="select" ...

  6. tp框架事务处理

    当我们需要同时对多个表进行操作的时候就有必要进行事务处理,首先你的数据库和数据表必须满足事务处理,即表引擎为InnoDB 下面为一个demo //事务:表必须是innodb    //删除主表$mod ...

  7. RIP协议两个版本对不连续子网的支持情况实验

    一.连续子网与不连续子网 我们经常见到说RIPv1不支持不连续子网,仅支持连续子网,那么什么是连续子网,什么是不连续子网呢? l  不连续子网:指在一个网络中,某几个连续由同一主网划分的子网在中间被多 ...

  8. PLS-00157: AUTHID only allowed on schema-level programs解决办法 包体的过程使用调用者权限方法

    在包体里写了一个过程,test执行时报错,但是如果把该过程单独拿出来创建一个,就能顺利执行. 在没加上调用者权  authid current_user之前,报错如下 ORA-01031: insuf ...

  9. CSS学习笔记(1)--浮动

    总结:浮动只能在脱离文档流的当前位置向上浮动,不能像定位一样到处乱跑. 清除浮动,设置一个类.clear{clear:both;} 1.没有浮动,都独占一行: <!DOCTYPE html> ...

  10. Supervisord进程管理工具

    进程管理工具Supervisord Posted on 2014/06/17 by admin Supervisord 上面已经介绍了Go目前是有两种方案来实现他的daemon,但是官方本身还不支持这 ...