问题代码定位神器: Git Bisect

简介: 问题代码定位神器: Git Bisect

在用 git 管理代码的过程中,经常需要回溯代码提交,找到引入问题的初始提交。git bisect 用的人不多,但正好能够帮助我们回溯并测试代码。原文: Debugging Made Easy with Git Bisect


Git Bisect 是什么?

Git bisect 是一个功能强大的工具,可以让我们快速找到哪个提交在代码库中引入了问题,手动检查每次提交并进行测试的日子已经一去不复返了!git bisect通过二进制搜索用最少的步骤确定引入问题的确切提交,从而节省了跟踪问题和错误的时间。

Git Bisect 如何工作?

git bisect的工作原理:


  • 要求你确认最后一次已知的正确提交(不包含错误的提交)
  • 要求你识别一个错误提交(包含错误的提交,通常是master分支的头部)
  • 反复签出新提交,并要求你测试并识别是好的还是坏的


如下图所示,在每个阶段,基于当前提交是否包含错误,算法使用二分搜索将罪魁祸首的提交缩小到范围 A 或范围 B:


如何使用?

使用git bisect:


  1. 从顶层工作目录开始,切换到存在错误的分支上
  2. 执行git bisect start
  3. 执行git bisect bad将当前提交标记为包含错误
  4. 执行git bisect good <commit-hash>,标记一个你知道没有问题的提交哈希,比方说,你可以用git log找到 2 周前的某个没有问题的提交哈希
  5. Git bisect 现在会重复签出提交,直到找到罪魁祸首为止。在每次签出时,通过测试以确定是否存在错误
  6. 如果这次提交中存在错误,执行git bisect bad。如果没有问题,那就执行git bisect good
  7. 一旦 git bisect 找到罪魁祸首,会打印这样的日志:


d046321145678970f1c4191ca3fca822bb7219b7 is the first bad commit

复制代码


  1. 执行git bisect reset重置工作树


恭喜你找到了罪魁祸首🎉

结论

总之,git bisect对于任何开发人员的调试工具包来说都是一个至关重要的工具。它允许我们有效定位在代码库中引入错误的提交,从而节省在该过程中的时间和精力。如果还没用过git bisect,强烈建议尝试一下。




你好,我是俞凡,在 Motorola 做过研发,现在在 Mavenir 做技术工作,对通信、网络、后端架构、云原生、DevOps、CICD、区块链、AI 等技术始终保持着浓厚的兴趣,平时喜欢阅读、思考,相信持续学习、终身成长,欢迎一起交流学习。

微信公众号:DeepNoMind

目录
相关文章
|
1月前
|
安全 开发工具 数据安全/隐私保护
《Git 简易速速上手小册》第8章:保护你的代码(2024 最新版)
《Git 简易速速上手小册》第8章:保护你的代码(2024 最新版)
47 1
|
20天前
|
缓存 开发工具 git
windows系统通过git上传代码
windows系统通过git上传代码
|
12天前
|
开发工具 git 开发者
【git merge/rebase】详解合并代码、解决冲突
【git merge/rebase】详解合并代码、解决冲突
34 0
|
20天前
|
Shell 开发工具 git
git拉去代码报错"Failed to connect to 127.0.0.1 port 31181: Connection refused"
在克隆`https://example.git/`时遇到错误:&quot;fatal: unable to access &#39;https://example.git/&#39;: Failed to connect to 127.0.0.1 port 31181: Connection refused&quot;。原因是Windows上代理设置未正确关闭,影响了Git配置。解决方法是通过git bash运行命令检查并取消代理:`git config --global http.proxy`和`git config --global --unset http.proxy`。
32 1
 git拉去代码报错"Failed to connect to 127.0.0.1 port 31181: Connection refused"
|
5天前
|
Shell 测试技术 网络安全
【GIT】如何在GitHub上向一个开源项目贡献代码?
【GIT】如何在GitHub上向一个开源项目贡献代码?
21 5
|
11天前
|
敏捷开发 测试技术 持续交付
【git分支管理策略】如何高效的管理好代码版本
【git分支管理策略】如何高效的管理好代码版本
25 0
|
20天前
|
测试技术 持续交付 API
Git 代码提交注释管理规范
Git 代码提交注释管理规范
17 0
|
1月前
|
Linux 开发工具 数据安全/隐私保护
如何在linux中用git提交代码到仓库
如何在linux中用git提交代码到仓库
|
1月前
|
敏捷开发 测试技术 持续交付
云效产品使用常见问题之直接git clone 输入账密可以拉代码,但是云效平台上不行如何解决
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
1月前
|
开发工具 git
git 拉取代码仓库代码报错(合并错误 refusing to merge unrelated histories)
git 拉取代码仓库代码报错(合并错误 refusing to merge unrelated histories)
32 0