Git二分法定位Bug

Git二分法定位Bug的代码示例

使用Git二分法(git bisect)定位Bug的自动化脚本示例,结合Shell和Git命令实现:

bash 复制代码
#!/bin/bash

# 定义已知的好版本和坏版本提交哈希
GOOD_COMMIT="a1b2c3d"  # 替换为已知无Bug的提交
BAD_COMMIT="z9y8x7w"   # 替换为已知有Bug的提交

# 启动二分查找
git bisect start
git bisect good $GOOD_COMMIT
git bisect bad $BAD_COMMIT

# 自动化测试脚本(需根据项目实际情况修改)
while true; do
    # 运行测试命令(示例:Python项目的单元测试)
    if python -m pytest tests/unit/test_bug_feature.py; then
        git bisect good
    else
        git bisect bad
    fi

    # 检查是否完成二分查找
    if [ $(git bisect log | grep -c "first bad commit") -ne 0 ]; then
        echo "Found first bad commit:"
        git bisect log | grep -A 3 "first bad commit"
        break
    fi
done

# 重置二分查找状态
git bisect reset

关键步骤说明

初始化二分查找 通过git bisect start启动流程,用goodbad标记已知的正常和有问题的提交点。

自动化测试集成 脚本中python -m pytest部分应替换为实际项目的测试命令。测试通过时标记为good,失败时标记为bad

结果输出 当定位到首个问题提交时,会自动输出该提交的哈希和相关信息,包括作者、日期和提交消息。

注意事项

  1. 测试脚本必须具有明确的通过/失败状态(返回值为0表示通过)
  2. 复杂项目可能需要更精细的测试条件判断
  3. 建议在独立分支或临时工作区执行该操作
  4. 二进制文件变更可能导致某些提交无法正常测试

高级用法扩展

对于需要更复杂判断的场景,可以单独编写测试脚本并引用:

bash 复制代码
#!/bin/bash
git bisect run ./custom_test_script.sh

其中custom_test_script.sh应返回:

  • 0:测试通过
  • 1-127(除125):测试失败
  • 125:跳过当前提交(无法测试)
相关推荐
默_笙21 小时前
🍙 给每个请求过安检:FastAPI 是怎么把校验写进类型注解的
python
小羊没烦恼!21 小时前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
qq_4260039621 小时前
启动playwright录制codegen生成自动化测试脚本
python·自动化
虎头金猫21 小时前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
长沙三为智能科技21 小时前
家政小程序开发从0到上线:五阶段交付流程与验收清单
python
伞伞悦读1 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
只睡四小时1 天前
Canvas 弹道联机实战:700 行 + 固定时间步长
python·websocket·html5·游戏开发·canvas
C语言小火车1 天前
C/C++ 为什么需要编译器?
开发语言·c++
奇思妙想聪明勤奋的小羊1 天前
DeepAgents第5章:子Agent 与上下文隔离—让 Agent学会委派
人工智能·python·学习·语言模型
lpfasd1231 天前
2026年第38周GitHub趋势周报
python·科技·github