Bisect

Git 高级

Amanda Crawford-Adamo

Software and Data Engineer

什么是 git bisect?

一种使用二分查找定位引入缺陷的提交的工具

Git Bisect 命令

git bisect

目的

  1. 快速找到有问题的提交
  2. 数据调试的关键工具
  3. 加速根因分析
Git 高级

Bisect - 开始

  1. 启动 bisect 会话

    git bisect start
    
  2. 将当前状态标记为有问题

    git bisect bad
    
  3. 标记最后已知的良好状态

    git bisect good <commit-hash>
    

提交图:前两个提交为绿色(良好),最后一个为红色(已知有问题)。介于两者之间的三个提交为灰色(未知)。最后的良好提交用 git bisect good 标记,有问题的提交用 git bisect bad 标记。

Git 高级

Bisect - 搜索

  1. 将当前提交标记为有问题

    git bisect bad
    
  2. 将当前提交标记为良好

    git bisect good
    

提交图:前两个提交为绿色(良好),最后一个为红色(已知有问题)。介于两者之间的三个提交为灰色(未知)。Git bisect 使用二分查找先检查中间的提交,然后根据结果检查左侧或右侧。

Git 高级

Bisect - 自动化搜索

通过运行自动化测试脚本检查提交是否为良好或有问题。

git bisect run <script_name>
  • 测试通过时脚本需返回 0。
  • 测试失败时应返回非零值。

提交图:前两个提交为绿色(良好),最后一个为红色(已知有问题)。介于两者之间的三个提交为灰色(未知)。Git bisect 使用二分查找先检查中间的提交,然后根据结果检查左侧或右侧。

Git 高级

Bisect - 结果

Git Bisect 输出示例

$ git log
b1a534f is the first bad commit
commit b1a534f89l2c3d4e5f6g7h8i9j0k1l2m3n4o5p
Author: Jane Doe <[email protected]>
Date:   Thu Mar 14 14:30:00 2024 -0500

Update data transformation logic

退出 bisect 流程并返回当前 HEAD

git bisect reset
Git 高级

何时使用 git bisect

使用场景

  1. 查找数据流程中的回归
  2. 用测试脚本加速调试

提示

  • git bisect run <test-script> 实现自动化测试
  • 使用清晰的提交信息以辅助定位
Git 高级

让我们练习吧!

Git 高级

Preparing Video For Download...