什么是暗改式合并
解决冲突时顺手夹带无关改动,业内称为暗改式合并。这些改动只存在于合并提交里,不属于任何一方的分支提交,因此评审容易漏看,二分排查也难以定位。它的危害不在于技术难度,而在于不可见。
基本信息
| 风险 | 合并提交里多出的改动没有独立的提交记录 |
|---|---|
| 自查方式 | 查看合并提交本身引入的差异 |
| 规范建议 | 冲突解决只保留必要内容,无关修复拆成独立提交 |
| 评审重点 | 合并引入的差异是否等于两侧分支的并集 |
典型使用场景
- 评审合并提交时确认没有夹带额外改动
- 排查二分定位不准的问题:怀疑合并提交引入了隐形变化
- 制定团队规则,把冲突解决与研究性改动分开提交
- 复盘历史时检查关键合并是否被暗改
- 把合并提交纳入评审范围,而不是只看两侧分支
检查合并提交
检查合并提交
git show --first-parent --stat <合并提交> # 从主线一侧看合并引入的差异
git show <合并提交> # 查看合并提交的实际差异
git diff <一侧父提交> <合并提交> --stat # 与指定父提交对比
git range-diff main..feature main..merged # 对比两段提交之间是否一一对应检查视角
| 视角 | 做法 | 能看到什么 |
|---|---|---|
| 合并引入的差异 | 查看合并提交本身 | 多出来的额外改动 |
| 与一侧父提交对比 | 指定父提交后比较 | 合并相对该分支的变化 |
| 两段提交对照 | 区间差异对比 | 提交是否被改写或替换 |
评审合并提交时,重点看它引入的差异是否等于两侧分支的并集;多出来的部分一律要求拆分出来单独说明。
把冲突解决之外的改动混进合并提交,会让回退与二分排查都变困难:一次撤销会连带撤掉无关内容。