← 返回首页

用版本历史快速定位线上回归

一次猜错方向的排查,让我重新捡起了二分查找。

前阵子线上有个页面突然打不开。我盯着最近改动最多的模块看了两个小时,越看越觉得可疑,最后却发现问题来自一周前的一次依赖升级。

这种“凭经验锁定嫌疑人”的排查方式,我已经吃过不止一次亏。经验有用,但它也会把人带进熟悉的死胡同。后来我退回去,只确认两件事:哪个版本还正常,哪个版本已经出错。

让历史替我缩小范围

我先写了一条能稳定判断页面是否正常的命令,然后开始二分:

git bisect start
git bisect bad
git bisect good v2.3.0

Git 每次把代码切到中间版本,我只负责运行命令并标记 goodbad。原本横跨几十个提交的范围,很快缩到一个依赖更新上。那一刻有点尴尬,也有点痛快——机器没有跟着我的直觉跑偏。

如果判断过程能自动化,还可以直接执行:

git bisect run ./scripts/check-regression.sh

找到提交以后,我仍会把上下文再看一遍。有时那个提交只是碰巧揭开问题,真正的原因还藏在配置或数据迁移里。修复完成后,再从干净环境复现一次,最后记得退出:

git bisect reset

现在碰到回归,我会先忍住“肯定是那里”的冲动。把正常和异常的边界钉牢,再一步步缩小范围,通常比灵光一闪可靠得多。