浏览 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-review
status.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 合并冲突怎么解决:按原条件复测的结果

Before

原始现象

文本冲突已消失,但新状态仍以旧字符串比较,审核订单走到默认分支。

After

冲突决策记录与回归结果

整合同时保留常量与审核状态;3条测试覆盖旧、新、非法状态。这里是预期,不宣称迁移或双方全套测试通过。

验收方式

冲突决策记录与回归结果通过哪些检查才算完成

依据与范围

本页实际使用的资料