目录

设想

场景详解

解决方案的详细描述

案例1——手动验证提交

案例2——提交的自动验证

分步指南

案例1——手动验证提交

案例2——提交的自动验证

测试你的知识

额外的Git材料


Git在调试代码时提供了很好的支持。本教程向您展示了它是如何工作的。

设想

找到第一个损坏的git commit。

场景详解

但是,git的主要目的是版本控制,它也可用于调试。

你在系统中发现了一个错误,你的前两个问题当然是:谁做的,什么时候做的?

让git帮你快速搞定。

解决方案的详细描述

案例1——手动验证提交

如果您没有自动验证提交是否包含错误的方法,请遵循案例1。

解决方案将是git bisect。您可以使用命令git bisect start进入bisect模式。

然后您必须将当前提交标记为错误,因为它包含错误。输入git bisect bad命令。作为下一步,您必须标记最后一个已知的良好提交,即错误仍然不存在的提交。为此,您可能需要尝试多次提交。但是如果你记得它在2天前还在工作,那么就选择当天的提交。您可以检出每个提交进行测试。一旦你找到一个好的提交,使用命令git bisect good hash_of_the_good_commit。如果当前head是好的提交,则可以从命令末尾跳过哈希。

现在git bisect将检查一些提交。确定它们是否包含错误,并用git bisect good或git bisect bad标记它们。经过几个步骤,Git bisect会告诉你第一个好的提交。如果你认为你犯了一个错误,你可以随时重新启动bisect进程,只需输入git bisect reset即可。

案例2——提交的自动验证

如果您有一个脚本或任何可执行文件可以确定错误是否存在,则可以加快此过程。您甚至可以使用测试框架。重点只是如果错误不存在,可执行文件应返回0,如果存在错误,则返回任何其他内容。

与情况1类似,使用命令git bisect start进入bisect模式。

然后您必须将当前提交标记为错误,因为它包含错误。输入git bisect bad命令。作为下一步,您必须标记最后一个已知的良好提交,即错误仍然不存在的提交。

一旦你标记了一个好的和一个坏的提交,只需使用命令git bisect run path_to_your_executable。在这里,可执行文件既可以是一个独立的脚本,也可以是对带有一些参数的测试框架的调用。

在这一步之后,git bisect会向你展示第一个错误的提交。

分步指南

案例1——手动验证提交

  1. 输入git bisect start——它开始二等分过程
  2. 输入git bisect bad——它将当前提交标记为“坏”
  3. 输入git bisect good hash_of_last_working_commit——将最后一次提交标记为“good”,其中您确定该错误不存在
  4. 现在git bisect将检出当前和最后一次良好提交之间的提交。编译它并测试它。如果存在错误,请键入git bisect bad,否则键入git bisect good。
  5. 重复第4步,直到找不到提交

案例2——提交的自动验证

  1. 如果错误不存在,则实现返回0的测试,如果存在错误则返回非零(大多数测试框架已经以这种方式工作,因此在大多数情况下实现一些简单的单元测试就足够了)
  2. 输入git bisect start
  3. 输入git bisect bad
  4. 输入git bisect good hash_of_last_working_commit
  5. 输入git bisect run your_test

测试你的知识

您可以在这里测试您的知识:

  • https://github.com/lmarcell/git_practical_exercises_bisect

额外的Git材料

您可以在以下电子书中找到更多与git相关的有用信息:

  • https://leanpub.com/practicalguidetoversioncontrolwithgit/

https://www.codeproject.com/Tips/5301971/Find-the-Commit-which-Broke-the-Test-in-Git

在Git中找到破坏测试的提交相关推荐

  1. 如何取消提交我在Git中的最后一次提交[重复]

    本文翻译自:How to uncommit my last commit in Git [duplicate] This question already has an answer here: 这个 ...

  2. 如何在Git中更改多次提交的作者和提交者名称以及电子邮件?

    我当时正在学校计算机上编写一个简单的脚本,然后将更改提交到Git(在笔驱动器中的一个回购中,该回购是从家里的计算机中克隆的). 经过几次提交后,我意识到我正在以root用户身份提交东西. 有什么办法可 ...

  3. 彻底删除git中的较大文件(包括历史提交记录)

    场景 适用于从一个git项目中,将体积较大的资源彻底从git中删除,包括历史提交记录. 如果仅仅在目录中删除一个文件是不够的,只要在提交记录中有这个文件,那么 .git 中就会有这个文件的信息. 用 ...

  4. 在微信开发者工具中将代码提交到git中

    一:创建git仓库 在git中新建仓库,可以不用初始化仓库. 二:复制地址 创建成功之后会有一个仓库地址,将这个仓库地址复制下来. 三:在微信开发者工具中初始化仓库 git仓库创建完之后,新建一个微信 ...

  5. Git回滚到上一次提交的节点

    有这样的情况,在代码提交完成之后, 发现出了问题,需要回滚到上一次提交的节点,怎么做呢. 首先找到git提交的日志 git log 找到最近一次提交,复制提交的信息码,如图: 复制该信息码,然后控制台 ...

  6. 怎么在git中修改仓库的名称

    1.首先在git中找到个人主页 2.点击个人主页中的个人设置 3.往下拉找到数据管理中的仓库空间信息 4.点击进去在统计图的下面会有仓库的信息,点击设置 5.在基本设置中,设置仓库名称就可以修改成功啦

  7. 如何撤消Git中的最新本地提交?

    我不小心将错误的文件提交给Git ,但是我还没有将提交推送到服务器. 如何撤消本地存储库中的那些提交? #1楼 我想撤消我们共享存储库中的最新五次提交. 我查找了要回滚的修订版ID. 然后我输入以下内 ...

  8. 丢弃Git中的本地提交

    由于一些糟糕的挑选,我的本地Git存储库目前在原点之前提交了五个提交,并且状态不佳. 我想摆脱所有这些提交并重新开始. 显然,删除我的工作目录并重新克隆会这样做,但是再次从GitHub下载所有内容似乎 ...

  9. 如何将当前更改提交到git中的不同分支[重复]

    本文翻译自:How to commit my current changes to a different branch in git [duplicate] This question alread ...

最新文章

  1. dfasdfasdfas
  2. git init 与 git init --bare 区别
  3. php文章列表样式,css列表样式有哪些?css设置列表样式的方法
  4. 一个封装的使用Apache HttpClient进行Http请求(GET、POST、PUT等)的类。
  5. 【Android RTMP】音频数据采集编码 ( FAAC 头文件与静态库拷贝到 AS | CMakeList.txt 配置 FAAC | AudioRecord 音频采样 PCM 格式 )
  6. android ndk怎样加载o文件_在Android中使用TFLite c++部署
  7. Matlab在坐标点上按顺序标序号
  8. 输入数字自动找规律的软件_WPS2019 填充柄的顺序式填充、复制式填充、规律填充、自定义填充...
  9. jquery 鼠标事件汇总
  10. 太极图正确画法_太极图的三种画法你知道吗?
  11. 2019年企业数据生产力调研报告,90%的人都没看过
  12. java io异常处理_IO流异常处理
  13. 编码顺序、frame_num和POC
  14. mysql导出sql和表格文件大小_atitit.sql server2008导出导入数据库大的表格文件... oracle mysql...
  15. 阿里达摩院发布2019十大科技趋势:数字身份将成为第二张身份证
  16. C#路径中使用斜杠/和反斜杠\的区别
  17. 解决Excel中使用VBA出现microsoft visual c++ runtime错误
  18. java 动态图表_【动态演示】3个套路带你玩转Excel动态图表!
  19. Epub格式怎么转换成PDF格式?这个方法轻松解决
  20. 2.9.1 Packet Tracer - Basic Switch and End Device Configuration(作业)

热门文章

  1. linux 定时器_通过linux源码分析nodejs的keep-alive
  2. 决策树 prepruning_决策树与随机森林
  3. spark 设置主类_最近Kafka这么火,聊一聊Kafka:Kafka与Spark的集成
  4. 海报样机模型帮助以专业的方式展示你的设计
  5. 服务器操作系统版本检查,服务器操作系统版本检查
  6. c++除法保留小数_Golang中除法和取模运算与Python3的区别
  7. C++设计模式详解之抽象工厂模式解析
  8. Linux网络:Virtual Routing and Forwarding (VRF)
  9. Linux内核网络协议栈:udp数据包发送(源码解读)
  10. linux变量循环赋值,shell脚本 循环变量赋值cf当前页面