conflict-resolution
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseConflict Resolution
冲突解决
Overview
概述
Handle merge conflicts systematically to maintain code integrity.
Core principle: Conflicts require careful resolution, not just picking one side.
Announce at start: "I'm using conflict-resolution to handle these merge conflicts."
系统性地处理合并冲突,以维护代码完整性。
核心原则: 冲突需要仔细解决,而不是简单选择某一方的代码。
开始时声明: "我正在使用冲突解决流程来处理这些合并冲突。"
When Conflicts Occur
冲突发生场景
Conflicts happen when:
| Situation | Example |
|---|---|
| Rebasing on updated main | |
| Merging main into branch | |
| Cherry-picking commits | |
| Pulling with local changes | |
在以下情况会发生冲突:
| 场景 | 示例 |
|---|---|
| 基于更新后的主分支变基 | |
| 将主分支合并到当前分支 | |
| 拣选提交 | |
| 本地有修改时拉取代码 | |
The Resolution Process
解决流程
Conflict Detected
│
▼
┌─────────────────┐
│ 1. UNDERSTAND │ ← What's conflicting and why?
└────────┬────────┘
│
▼
┌─────────────────┐
│ 2. ANALYZE │ ← Review both versions
└────────┬────────┘
│
▼
┌─────────────────┐
│ 3. RESOLVE │ ← Make informed decision
└────────┬────────┘
│
▼
┌─────────────────┐
│ 4. VERIFY │ ← Tests pass, code works
└────────┬────────┘
│
▼
┌─────────────────┐
│ 5. CONTINUE │ ← Complete the operation
└─────────────────┘检测到冲突
│
▼
┌─────────────────┐
│ 1. 理解冲突 │ ← 冲突内容是什么?原因是什么?
└────────┬────────┘
│
▼
┌─────────────────┐
│ 2. 分析双方代码 │ ← 审阅两个版本的代码
└────────┬────────┘
│
▼
┌─────────────────┐
│ 3. 解决冲突 │ ← 做出合理决策
└────────┬────────┘
│
▼
┌─────────────────┐
│ 4. 验证解决方案 │ ← 测试通过,代码可正常运行
└────────┬────────┘
│
▼
┌─────────────────┐
│ 5. 完成操作 │ ← 结束当前的变基/合并操作
└─────────────────┘Step 1: Understand the Conflict
步骤1:理解冲突
See Conflicting Files
查看存在冲突的文件
bash
undefinedbash
undefinedList files with conflicts
列出存在冲突的文件
git status
git status
Output shows:
输出示例:
Unmerged paths:
Unmerged paths:
both modified: src/services/user.ts
both modified: src/services/user.ts
both modified: src/utils/validation.ts
both modified: src/utils/validation.ts
undefinedundefinedView the Conflict
查看冲突细节
bash
undefinedbash
undefinedSee the conflict markers
查看冲突标记
cat src/services/user.ts
```typescript
<<<<<<< HEAD
// Your changes
function createUser(data: UserData): User {
return { ...data, id: generateId() };
}
=======
// Their changes (main branch)
function createUser(data: UserData): Promise<User> {
return db.create({ ...data, id: generateId() });
}
>>>>>>> maincat src/services/user.ts
```typescript
<<<<<<< HEAD
// 你的修改
function createUser(data: UserData): User {
return { ...data, id: generateId() };
}
=======
// 对方的修改(主分支)
function createUser(data: UserData): Promise<User> {
return db.create({ ...data, id: generateId() });
}
>>>>>>> mainUnderstand the History
查看历史变更
bash
undefinedbash
undefinedSee what changed in each branch
查看两个分支中文件的变更记录
git log --oneline --left-right HEAD...main -- src/services/user.ts
git log --oneline --left-right HEAD...main -- src/services/user.ts
See the actual changes
查看具体的变更内容
git diff HEAD...main -- src/services/user.ts
undefinedgit diff HEAD...main -- src/services/user.ts
undefinedStep 2: Analyze Both Versions
步骤2:分析双方版本
Questions to Answer
需要回答的问题
| Question | Consider |
|---|---|
| What was the intent of your change? | Your feature/fix |
| What was the intent of their change? | Their feature/fix |
| Are they mutually exclusive? | Can both coexist? |
| Which is more recent/correct? | Check issue references |
| Do both need to be kept? | Merge the logic |
| 问题 | 考虑因素 |
|---|---|
| 你的修改意图是什么? | 你的功能/修复需求 |
| 对方的修改意图是什么? | 对方的功能/修复需求 |
| 两者是否互斥? | 是否可以共存? |
| 哪个版本更新/更正确? | 查看关联的问题编号 |
| 是否需要保留双方的修改? | 合并逻辑 |
Compare Approaches
对比实现方案
markdown
undefinedmarkdown
undefinedConflict Analysis: src/services/user.ts
冲突分析:src/services/user.ts
My Change (feature/issue-123)
我的修改(feature/issue-123)
- Made createUser synchronous
- Reason: Simplified for local testing
- Issue: #123
- 将createUser改为同步方法
- 原因:简化本地测试流程
- 关联问题:#123
Their Change (main)
对方的修改(main分支)
- Made createUser async with DB
- Reason: Production database integration
- Issue: #456
- 将createUser改为支持数据库的异步方法
- 原因:适配生产环境的数据库集成
- 关联问题:#456
Resolution
解决方案
Keep their async version (production requirement).
My testing simplification should use mocks instead.
undefined保留对方的异步版本(满足生产环境要求)。
我的测试简化需求应通过Mock实现。
undefinedStep 3: Resolve the Conflict
步骤3:解决冲突
Resolution Strategies
解决策略
Keep Theirs (Main)
保留对方版本(主分支)
When main's version is correct:
bash
undefined当主分支版本更合适时:
bash
undefinedUse their version
使用对方的版本
git checkout --theirs src/services/user.ts
git add src/services/user.ts
undefinedgit checkout --theirs src/services/user.ts
git add src/services/user.ts
undefinedKeep Ours (Your Branch)
保留我方版本(当前分支)
When your version is correct:
bash
undefined当你的版本更合适时:
bash
undefinedUse your version
使用你的版本
git checkout --ours src/services/user.ts
git add src/services/user.ts
undefinedgit checkout --ours src/services/user.ts
git add src/services/user.ts
undefinedManual Merge (Both)
手动合并(保留双方修改)
When both changes are needed:
typescript
// Remove conflict markers
// Combine both changes intelligently
// Result: Keep async from main, add your new validation
async function createUser(data: UserData): Promise<User> {
// Your addition: validation
validateUserData(data);
// Their change: async DB call
return db.create({ ...data, id: generateId() });
}bash
undefined当需要保留双方修改时:
typescript
undefinedAfter editing
移除冲突标记
—
智能合并双方的修改逻辑
—
最终结果:保留主分支的异步实现,添加你的新验证逻辑
git add src/services/user.ts
undefinedasync function createUser(data: UserData): Promise<User> {
// 你的新增内容:验证逻辑
validateUserData(data);
// 对方的修改:异步数据库调用
return db.create({ ...data, id: generateId() });
}
```bashConflict Markers
编辑完成后
Remove ALL conflict markers:
<<<<<<< HEAD ← Remove
======= ← Remove
>>>>>>> main ← RemoveThe final file should have NO conflict markers.
git add src/services/user.ts
undefinedStep 4: Verify Resolution
冲突标记处理
Syntax Check
—
bash
undefined移除所有冲突标记:
<<<<<<< HEAD ← 移除该行
======= ← 移除该行
>>>>>>> main ← 移除该行最终文件中不能存在任何冲突标记。
TypeScript: Check types
步骤4:验证解决方案
—
语法检查
pnpm typecheck
bash
undefinedOr for specific file
TypeScript:检查类型
npx tsc --noEmit src/services/user.ts
undefinedpnpm typecheck
Run Tests
或针对单个文件检查
bash
undefinednpx tsc --noEmit src/services/user.ts
undefinedRun all tests
运行测试
pnpm test
bash
undefinedRun tests for affected area
运行所有测试
pnpm test --grep "user"
undefinedpnpm test
Visual Review
运行受影响模块的测试
bash
undefinedpnpm test --grep "user"
undefinedSee final resolved state
可视化审阅
git diff --cached
bash
undefinedEnsure no conflict markers remain
查看最终的解决结果
grep -r "<<<<<<" src/
grep -r "======" src/
grep -r ">>>>>>" src/
undefinedgit diff --cached
Step 5: Continue the Operation
确保没有残留冲突标记
After Rebase
—
bash
undefinedgrep -r "<<<<<<" src/
grep -r "======" src/
grep -r ">>>>>>" src/
undefinedContinue the rebase
步骤5:完成操作
—
变基后的操作
git rebase --continue
bash
undefinedIf more conflicts, repeat resolution
继续变基流程
When complete:
—
git push --force-with-lease
undefinedgit rebase --continue
After Merge
如果还有冲突,重复解决流程
—
完成后:
bash
undefinedgit push --force-with-lease
undefinedComplete the merge
合并后的操作
git commit -m "Merge main into feature/issue-123"
bash
undefinedPush
完成合并
git push
undefinedgit commit -m "Merge main into feature/issue-123"
Abort if Needed
推送代码
If resolution goes wrong:
bash
undefinedgit push
undefinedAbort rebase
必要时终止操作
git rebase --abort
如果解决过程出现问题:
bash
undefinedAbort merge
终止变基
git merge --abort
git rebase --abort
Start fresh
终止合并
undefinedgit merge --abort
Complex Conflicts
重新开始
Multiple Files
—
Resolve one file at a time:
bash
undefinedundefinedSee all conflicts
复杂冲突处理
—
多文件冲突
git status
逐个解决文件冲突:
bash
undefinedResolve each
查看所有冲突文件
1. Edit file
—
2. git add file
—
3. Next file
—
When all resolved
—
git rebase --continue
undefinedgit status
Semantic Conflicts
逐个解决:
—
1. 编辑文件
—
2. git add 文件
—
3. 处理下一个文件
—
所有冲突解决后
Sometimes code merges cleanly but is semantically broken:
typescript
// main: Function signature changed
function process(data: NewFormat): Result
// yours: Called with old format
process(oldFormatData); // No conflict marker, but broken!Always run tests after resolution.
git rebase --continue
undefinedConflicting Dependencies
语义冲突
json
// package.json conflict
<<<<<<< HEAD
"dependencies": {
"library": "^2.0.0"
=======
"dependencies": {
"library": "^1.5.0"
>>>>>>> mainResolution:
- Choose the appropriate version
- Delete
pnpm-lock.yaml - Run
pnpm install - Commit the new lock file
有时代码可以正常合并,但逻辑上存在问题:
typescript
// 主分支:函数签名已修改
function process(data: NewFormat): Result
// 你的分支:使用旧格式调用函数
process(oldFormatData); // 没有冲突标记,但代码已损坏!解决后务必运行测试。
Best Practices
依赖冲突
Before Resolution
—
- Pull latest main frequently to minimize conflicts
- Keep branches short-lived
- Communicate about shared files
json
// package.json 冲突
<<<<<<< HEAD
"dependencies": {
"library": "^2.0.0"
=======
"dependencies": {
"library": "^1.5.0"
>>>>>>> main解决方法:
- 选择合适的版本
- 删除
pnpm-lock.yaml - 运行
pnpm install - 提交新的锁文件
During Resolution
最佳实践
—
冲突解决前
- Take your time
- Understand both changes
- Don't just pick "ours" or "theirs" blindly
- Test after resolution
- 经常拉取最新的主分支代码,减少冲突概率
- 保持分支生命周期简短
- 针对共享文件与团队成员沟通
After Resolution
冲突解决中
- Run full test suite
- Review the merged result
- Commit with clear message
- 不要急于操作
- 理解双方的修改意图
- 不要盲目选择“我方”或“对方”版本
- 解决后进行测试
Conflict Message
冲突解决后
When conflicts occur during PR:
markdown
undefined- 运行完整的测试套件
- 审阅合并后的结果
- 使用清晰的提交信息
Merge Conflict Resolution
冲突处理说明模板
This PR had conflicts with main that have been resolved.
当PR中出现冲突时,可使用以下模板说明:
markdown
undefinedConflicting Files
合并冲突处理说明
src/services/user.tssrc/utils/validation.ts
本PR与main分支存在冲突,现已解决。
Resolution Summary
冲突文件
user.ts:
Kept async implementation from main, added validation from this PR.
validation.ts:
Merged both validation rules (main added email, this PR added phone).
src/services/user.tssrc/utils/validation.ts
Verification
解决摘要
- All tests pass
- Build succeeds
- No conflict markers in code
- Functionality verified manually
undefineduser.ts:
保留了主分支的异步实现,添加了本PR中的验证逻辑。
validation.ts:
合并了双方的验证规则(主分支新增了邮箱验证,本PR新增了手机号验证)。
Checklist
验证情况
When resolving conflicts:
- All conflicting files identified
- Each conflict analyzed (understood both sides)
- Resolution chosen (ours/theirs/merge)
- Conflict markers removed
- Files staged ()
git add - Tests pass
- Build succeeds
- No remaining conflict markers
- Operation completed (rebase --continue / commit)
- 所有测试通过
- 构建成功
- 代码中无冲突标记
- 功能已手动验证
undefinedIntegration
检查清单
This skill is called when:
- encounters conflicts
git rebase - encounters conflicts
git merge - PR shows conflicts
This skill ensures:
- Clean resolution
- No lost changes
- Working code after merge
解决冲突时需确认:
- 已识别所有冲突文件
- 已分析每个冲突(理解双方修改意图)
- 已选择解决方案(我方/对方/合并)
- 已移除冲突标记
- 已暂存文件()
git add - 测试通过
- 构建成功
- 无残留冲突标记
- 已完成操作(rebase --continue / commit)
—
触发场景
—
当出现以下情况时,将调用本技能:
- 遇到冲突
git rebase - 遇到冲突
git merge - PR显示存在冲突
本技能可确保:
- 冲突解决干净彻底
- 无代码丢失
- 合并后代码可正常运行