浏览 AI使用教程
Git 合并冲突怎么解决:分清两边意图并完成回归验证
解决 Git 冲突不是把两边文字都留下。先弄清两项改动分别想保护什么业务行为,再合并代码并跑针对性的回归测试。
“保留双方”能消掉冲突标记,却不一定保住两边逻辑
合并冲突的一边把 `status` 改成枚举,另一边新增了 `pending_review` 分支。简单选择“保留双方”后代码编译,但旧字符串仍绕过新校验。
- 每个冲突块的双方意图已记录
- 合并结果不是简单拼接
- 双方测试与跨分支回归已运行
Git 合并冲突怎么解决,先从“同一逻辑被两边修改”这一类现象查起
同一逻辑被两边修改
- 原因
- 两个变更可能解决不同问题或建立不同不变量。
- 怎么改
- 分别读取提交、测试和调用方,列两边必须保留的行为,再写兼容实现。
一边重命名,一边继续编辑旧文件
- 原因
- 文件路径变化掩盖了内容修改。
- 怎么改
- 追踪历史和符号,先把内容改动迁到新位置,再删除旧文件。
依赖或锁文件冲突
- 原因
- 手工拼接锁文件可能产生不存在的依赖图。
- 怎么改
- 先决定清单文件的正确依赖,再用项目包管理器重新生成并审查差异。
生成物冲突
- 原因
- 源数据或生成器已经变化,直接合并产物会过期。
- 怎么改
- 确认权威源,解决源文件后运行仓库生成命令,不手改生成结果。
复测前,固定原始现象、环境和目标
| 需要确认 | 本例内容 |
|---|---|
| 现有材料 | base允许pending/paid;当前分支改Status常量,另一分支新增pending_review。仅纯模块,不涉及数据库迁移。 |
| 不能越过的边界 | 先理解两边业务意图,再写第三个整合版本;不只删除冲突标记;合并后跑双方相关测试。 |
| 要交付的结果 | 冲突决策记录与回归结果 |
共同起点、冲突与第三个整合版本
base
共同起点
export const valid = s => ['pending','paid'].includes(s);
status.mjs 冲突
两种意图
<<<<<<< HEAD
export const Status = Object.freeze({PENDING:'pending',PAID:'paid'});
export const valid = s => Object.values(Status).includes(s);
=======
export const valid = s => ['pending','paid','pending_review'].includes(s);
>>>>>>> feature-reviewstatus.mjs 整合
保留双方
export const Status = Object.freeze({PENDING:'pending',PAID:'paid',PENDING_REVIEW:'pending_review'});
export const valid = s => Object.values(Status).includes(s);status.test.mjs
3条Node测试
import test from 'node:test';
import assert from 'node:assert/strict';
import {Status,valid} from './status.mjs';
test('旧状态',()=>assert.ok(valid(Status.PAID)));
test('新状态',()=>assert.ok(valid(Status.PENDING_REVIEW)));
test('非法状态',()=>assert.equal(valid('unknown'),false));已有冲突时
按status提示选择继续方式
git status node --test status.test.mjs git diff --check git add -- status.mjs status.test.mjs # 正在merge:git merge --continue # 正在rebase:git rebase --continue # 放弃:对应使用git merge --abort或git rebase --abort
仅在练习仓库或基线已保存的工作区操作。abort不能保证恢复开始前混杂的所有未提交修改;开始操作前就应保存。rebase时ours/theirs可能与直觉相反,必须读双方代码与提交。
Git 合并冲突怎么解决:按原条件复测的结果
原始现象
文本冲突已消失,但新状态仍以旧字符串比较,审核订单走到默认分支。
冲突决策记录与回归结果
整合同时保留常量与审核状态;3条测试覆盖旧、新、非法状态。这里是预期,不宣称迁移或双方全套测试通过。
