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:跳过当前提交(无法测试)
相关推荐
TheBestRucy13 分钟前
Python九阳神功之陆:数据库持久化与缓存·乾坤大挪移
数据库·python·缓存
qq_3391911417 分钟前
go cpu占比高排查,cpu100%排查,go pprof cpu命令
开发语言·后端·golang
西西弗Sisyphus22 分钟前
Qt 配置文件图标和文件版本信息
开发语言·qt
坐吃山猪25 分钟前
IDEA调试中Evaluate常用操作
java·python·intellij-idea
秋田君29 分钟前
Qt_Qt(c++)开发中常见错误与解决方法
开发语言·c++·qt
Tizzy JJ36 分钟前
接口自动化测试实战:如何围绕真实业务场景设计高质量用例
python·自动化·pytest
海兰39 分钟前
【 Python 量化交易】第10章:八大经典策略
android·python·kotlin
夏霞1 小时前
c# 不支持的目标框架 解决方案
开发语言·c#
IT码农-爱吃辣条1 小时前
Milvus 向量数据库 Python 实战教程
数据库·python·milvus
雄哥0071 小时前
java代码反编译CFR
java·开发语言·反编译·cfr