如何使用git bisect定位破坏master分支的合并提交
可以实现,你只需要使用git bisect内置的--first-parent参数即可,完全满足你只排查master主线合并提交、不进入特性分支内部的需求。
实现原理
--first-parent参数的作用是在回溯提交历史时,仅跟随每个合并提交的第一个父提交(也就是master主线本身的提交链),完全忽略被合并进来的特性分支的所有提交,效果等价于你把每一次特性分支合并的所有改动视为单个变更节点排查,和你描述的squash场景完全一致。
具体操作步骤
- 启动带主线跟踪的bisect流程
git bisect start --first-parent
- 标记当前损坏的master版本为坏提交
git bisect bad HEAD
- 标记已知的最后一个正常的master版本为好提交,示例中使用v1.0.0这个tag,你可以替换为你确认正常的任意提交哈希
git bisect good v1.0.0
后续按照常规bisect流程操作即可:每次测试当前检出的提交是否有故障,标记git bisect good(正常)或git bisect bad(故障),整个流程只会在master的主线提交(包括合并提交)之间跳转,不会进入任何特性分支的提交历史,最终会直接定位到引发故障的那次合并操作。
适用前提
该方案在标准的PR合并工作流下默认生效:所有合并到master的提交的第一个父提交都是master的前序主线提交,不需要你手动判断分支线走向,Git会自动处理。
内容的提问来源于stack exchange,提问作者oligofren
相关产品推荐
相关产品推荐

