| name | merge-conflict-resolution |
| version | 1.0.0 |
| description | Use when git merge or rebase fails with conflicts, you see 'unmerged paths' or conflict markers (<<<<<<< =======), or need help resolving conflicted files |
Both branches represent valuable work. Conflicts exist because two developers solved problems in parallel. Your job is to transplant the best of both into a single, coherent result.
These commands are amputation, not surgery. They discard one side's work entirely. We are creating a chimera of both branches, carefully selecting which lines go where.
The only acceptable uses:
- Binary files (no synthesis possible)
- Generated files that will be regenerated (lock files, build artifacts)
- User explicitly requests it after understanding the tradeoff
For everything else: read both versions, understand both intents, synthesize both contributions. If synthesis is truly impossible, STOP and explain why before discarding anything.
This happens when you:
- Ask binary questions ("Should we use A or B?")
- Get a partial answer about ONE aspect
- Interpret that answer as approval to replace EVERYTHING
Real example of this failure:
- User said: "Master's simplification is desirable" (about ONE function)
- User said: "Always PROVIDER_SETTINGS_MORE" (about navigation target)
- Assistant then REPLACED A 100-LINE FUNCTION WITH MASTER'S 15-LINE VERSION
- User: "Why did you do that. I didn't ask you to just do a --theirs for that file."
How to avoid:
- NEVER ask binary "A or B?" questions about complex code
- Ask open-ended: "What specifically should change?"
- Approval for ONE aspect is NOT approval for EVERYTHING
- "Simplify X" means CREATE A NEW SYNTHESIS simpler than either version - not adopt theirs, not keep ours
- Before deleting ANY code, ask: "Is there a test for this?"
- Make surgical line-by-line edits, not wholesale replacements
Merge Conflict Resolution Skill
Resolve git merge conflicts by analyzing both branches' intent and synthesizing their changes.
When to Use
| Trigger | Example |
|---|---|
| Merge fails with conflicts | CONFLICT (content): Merge conflict in src/auth.py |
| Rebase fails with conflicts | CONFLICT (modify/delete): Deleted in HEAD... |
| Git status shows unmerged | You have unmerged paths |
| User asks for help | "Resolve these conflicts", "Help me merge" |
Workflow Phases
| Phase | Action | Output |
|---|---|---|
| 1. Detect | Identify conflicted files, classify as mechanical or complex | File list with classifications |
| 2. Analyze | 3-way diff: base vs ours vs theirs (parallel subagents for complex) | Intent summary for each branch |
| 3. Auto-resolve | Regenerate lock files, merge changelogs chronologically | Resolved mechanical files |
| 4. Plan | Create synthesis strategy for complex conflicts | Resolution plan for approval |
| 5. Execute | Apply resolutions file-by-file after user approval | Resolved files |
| 6. Verify | Code review, optional tests/build/lint | Verification report |
Mechanical vs Complex Conflicts
| Type | Files | Resolution |
|---|---|---|
| Mechanical | Lock files (*-lock.json, *.lock, *lock.yaml), changelogs (CHANGELOG.md, CHANGES.md, HISTORY.md), test fixtures (*-query-counts.json) |
Auto-resolve: regenerate locks, merge changelogs chronologically |
| Complex | Source code, configs, documentation | Requires 3-way analysis and synthesis |
Common Conflict Patterns
| Pattern | Scenario | Resolution |
|---|---|---|
| Both modified same function | Ours: added logging; Theirs: added error handling | Merge both: logging AND error handling |
| One deleted, other modified | Ours: moved function; Theirs: fixed bug in it | Apply fix to new location |
| Both added same name | Ours: format_date() for ISO; Theirs: for locale |
Rename to distinguish, or merge if same purpose |
- Do I have the merge base? (What did the code look like before both branches diverged?)
- What did "ours" change, and WHY?
- What did "theirs" change, and WHY?
- Can both intents be preserved in the synthesis?
- If not, have I asked the user before dropping anything?
- Are there TESTS for this code? (Tests tell you what behavior is expected. Deleting tested code = breaking tests.)
- Am I making a surgical edit or a wholesale replacement? (If replacing >20 lines, STOP and get explicit approval.)
Proceed only when you can answer all seven.
Resolution Plan Template
When presenting a resolution plan, use this format:
## Resolution Plan for [filename]
**Merge Base:** [brief description of original state]
**Ours:** [what our branch changed and why]
**Theirs:** [what their branch changed and why]
**Synthesis Strategy:**
- [how both changes will be combined]
- [any renames or relocations needed]
**Risk:** [any concerns or edge cases]
Limitations
| Limitation | Behavior |
|---|---|
| Binary files | Cannot analyze; will ask you to choose a version |
| Generated code | May need manual regeneration after resolution |
| Very large files | Analysis focuses on conflict regions only |
Asking Questions Right
| BAD (binary, leads to over-interpretation) | GOOD (open-ended, surgical) |
|---|---|
| "Should we use ours or theirs?" | "What specifically needs to change in this function?" |
| "Do we need this feature?" | "Which lines of this feature should be kept vs removed?" |
| "Is master's version better?" | "What do you like about master's approach that we should adopt?" |
| "Should I simplify this?" | "Which specific fallbacks are unnecessary?" |
The trap: Binary questions get binary answers. You then extrapolate that answer to justify wholesale changes the user never approved.
Red Flags (STOP if you think these)
| Thought | What it actually means |
|---|---|
| "The user said to simplify, so I'll use master's version" | NO. Simplify means SYNTHESIZE BOTH into something simpler than EITHER. Not ours, not theirs - a NEW third option. |
| "This is basically the same thing" | NO. If it were the same, there wouldn't be a conflict. |
| "I'll just adopt their approach" | NO. You're doing --theirs with extra steps. |
| "I'll keep our approach" | NO. You're doing --ours with extra steps. The answer is almost never to pick a side. |
| "The user approved this change" | Did they approve THIS change, or a DIFFERENT change you're extending? |
| "This is cleaner" | Cleaner is not the goal. Preserving both intents is the goal. |
| "The tests will need updating anyway" | Tests exist for a reason. Understand that reason first. |
Tips
- Always review the resolution plan before approving
- Run tests after resolution to verify both features work
- If you're deleting more than you're adding, you're probably amputating
Related Skills
| Skill | When to Use Instead |
|---|---|
worktree-merge |
When merging multiple parallel worktrees with interface contracts (orchestrated parallel development) |
debug --systematic |
When resolution verification fails and you need to debug |