zoukankan      html  css  js  c++  java
  • 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查看。

    博客新地址www.zqlite.com
  • 相关阅读:
    Java网络编程:OSI七层模型和TCP/IP模型介绍
    Java网络编程:IP地址和端口号
    Java缓冲流的优点和原理
    Java线程的优先级设置遵循什么原则?
    java笔试题大全带答案(经典11题)
    java笔试题大全之IO流常见选择题
    java笔试手写算法面试题大全含答案
    java笔试常见的选择题
    Java的类加载器都有哪些,每个类加载器都有加载那些类,什么是双亲委派模型,是做什么的?
    Java的安全性如何理解
  • 原文地址:https://www.cnblogs.com/zqlxtt/p/4643245.html
Copyright © 2011-2022 走看看