conflict-resolution

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Conflict 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:
SituationExample
Rebasing on updated main
git rebase origin/main
Merging main into branch
git merge origin/main
Cherry-picking commits
git cherry-pick [sha]
Pulling with local changes
git pull
在以下情况会发生冲突:
场景示例
基于更新后的主分支变基
git rebase origin/main
将主分支合并到当前分支
git merge origin/main
拣选提交
git cherry-pick [sha]
本地有修改时拉取代码
git pull

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
undefined
bash
undefined

List 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

undefined
undefined

View the Conflict

查看冲突细节

bash
undefined
bash
undefined

See 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() });
}
>>>>>>> main
cat 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() });
}
>>>>>>> main

Understand the History

查看历史变更

bash
undefined
bash
undefined

See 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
undefined
git diff HEAD...main -- src/services/user.ts
undefined

Step 2: Analyze Both Versions

步骤2:分析双方版本

Questions to Answer

需要回答的问题

QuestionConsider
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
undefined
markdown
undefined

Conflict 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实现。
undefined

Step 3: Resolve the Conflict

步骤3:解决冲突

Resolution Strategies

解决策略

Keep Theirs (Main)

保留对方版本(主分支)

When main's version is correct:
bash
undefined
当主分支版本更合适时:
bash
undefined

Use their version

使用对方的版本

git checkout --theirs src/services/user.ts git add src/services/user.ts
undefined
git checkout --theirs src/services/user.ts git add src/services/user.ts
undefined

Keep Ours (Your Branch)

保留我方版本(当前分支)

When your version is correct:
bash
undefined
当你的版本更合适时:
bash
undefined

Use your version

使用你的版本

git checkout --ours src/services/user.ts git add src/services/user.ts
undefined
git checkout --ours src/services/user.ts git add src/services/user.ts
undefined

Manual 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
undefined

After editing

移除冲突标记

智能合并双方的修改逻辑

最终结果:保留主分支的异步实现,添加你的新验证逻辑

git add src/services/user.ts
undefined
async function createUser(data: UserData): Promise<User> { // 你的新增内容:验证逻辑 validateUserData(data);
// 对方的修改:异步数据库调用 return db.create({ ...data, id: generateId() }); }

```bash

Conflict Markers

编辑完成后

Remove ALL conflict markers:
<<<<<<< HEAD      ← Remove
=======           ← Remove
>>>>>>> main      ← Remove
The final file should have NO conflict markers.
git add src/services/user.ts
undefined

Step 4: Verify Resolution

冲突标记处理

Syntax Check

bash
undefined
移除所有冲突标记:
<<<<<<< HEAD      ← 移除该行
=======           ← 移除该行
>>>>>>> main      ← 移除该行
最终文件中不能存在任何冲突标记。

TypeScript: Check types

步骤4:验证解决方案

语法检查

pnpm typecheck
bash
undefined

Or for specific file

TypeScript:检查类型

npx tsc --noEmit src/services/user.ts
undefined
pnpm typecheck

Run Tests

或针对单个文件检查

bash
undefined
npx tsc --noEmit src/services/user.ts
undefined

Run all tests

运行测试

pnpm test
bash
undefined

Run tests for affected area

运行所有测试

pnpm test --grep "user"
undefined
pnpm test

Visual Review

运行受影响模块的测试

bash
undefined
pnpm test --grep "user"
undefined

See final resolved state

可视化审阅

git diff --cached
bash
undefined

Ensure no conflict markers remain

查看最终的解决结果

grep -r "<<<<<<" src/ grep -r "======" src/ grep -r ">>>>>>" src/
undefined
git diff --cached

Step 5: Continue the Operation

确保没有残留冲突标记

After Rebase

bash
undefined
grep -r "<<<<<<" src/ grep -r "======" src/ grep -r ">>>>>>" src/
undefined

Continue the rebase

步骤5:完成操作

变基后的操作

git rebase --continue
bash
undefined

If more conflicts, repeat resolution

继续变基流程

When complete:

git push --force-with-lease
undefined
git rebase --continue

After Merge

如果还有冲突,重复解决流程

完成后:

bash
undefined
git push --force-with-lease
undefined

Complete the merge

合并后的操作

git commit -m "Merge main into feature/issue-123"
bash
undefined

Push

完成合并

git push
undefined
git commit -m "Merge main into feature/issue-123"

Abort if Needed

推送代码

If resolution goes wrong:
bash
undefined
git push
undefined

Abort rebase

必要时终止操作

git rebase --abort
如果解决过程出现问题:
bash
undefined

Abort merge

终止变基

git merge --abort
git rebase --abort

Start fresh

终止合并

undefined
git merge --abort

Complex Conflicts

重新开始

Multiple Files

Resolve one file at a time:
bash
undefined
undefined

See all conflicts

复杂冲突处理

多文件冲突

git status
逐个解决文件冲突:
bash
undefined

Resolve each

查看所有冲突文件

1. Edit file

2. git add file

3. Next file

When all resolved

git rebase --continue
undefined
git 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
undefined

Conflicting Dependencies

语义冲突

json
// package.json conflict
<<<<<<< HEAD
  "dependencies": {
    "library": "^2.0.0"
=======
  "dependencies": {
    "library": "^1.5.0"
>>>>>>> main
Resolution:
  1. Choose the appropriate version
  2. Delete
    pnpm-lock.yaml
  3. Run
    pnpm install
  4. 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
解决方法:
  1. 选择合适的版本
  2. 删除
    pnpm-lock.yaml
  3. 运行
    pnpm install
  4. 提交新的锁文件

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
undefined

Conflicting Files

合并冲突处理说明

  • src/services/user.ts
  • src/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.ts
  • src/utils/validation.ts

Verification

解决摘要

  • All tests pass
  • Build succeeds
  • No conflict markers in code
  • Functionality verified manually
undefined
user.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)
  • 所有测试通过
  • 构建成功
  • 代码中无冲突标记
  • 功能已手动验证
undefined

Integration

检查清单

This skill is called when:
  • git rebase
    encounters conflicts
  • git merge
    encounters conflicts
  • 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显示存在冲突
本技能可确保:
  • 冲突解决干净彻底
  • 无代码丢失
  • 合并后代码可正常运行