roo-conflict-resolution
Roo Code Conflict Resolution Skill
When to Use This Skill
Use this skill when the task involves:
- Resolving merge conflicts for a specific pull request
- Rebasing a branch that has conflicts with the target branch
- Understanding and analyzing conflicting code changes
- Making intelligent decisions about which changes to keep, merge, or discard
- Using git history to inform conflict resolution decisions
When NOT to Use This Skill
Do NOT use this skill when:
- There are no merge conflicts to resolve
- The task is about general code review without conflicts
- You're working on fresh code without any merge scenarios
Workflow Overview
This skill resolves merge conflicts by analyzing git history, commit messages, and code changes to make intelligent resolution decisions. Given a PR number (e.g., "#123"), it handles the entire conflict resolution process.
Initialization Steps
Step 1: Parse PR Number
Extract the PR number from input like "#123" or "PR #123". Validate that a PR number was provided.
Step 2: Fetch PR Information
gh pr view [PR_NUMBER] --json title,body,headRefName,baseRefName
Get PR title and description to understand the intent and identify the source and target branches.
Step 3: Checkout PR Branch and Prepare for Rebase
gh pr checkout [PR_NUMBER] --force
git fetch origin main
GIT_EDITOR=true git rebase origin/main
- Force checkout the PR branch to ensure clean state
- Fetch the latest main branch
- Attempt to rebase onto main to reveal conflicts
- Use
GIT_EDITOR=trueto ensure non-interactive rebase
Step 4: Check for Merge Conflicts
git status --porcelain
git diff --name-only --diff-filter=U
Identify files with merge conflicts (marked with 'UU') and create a list of files that need resolution.
Main Workflow Phases
Phase 1: Conflict Analysis
Analyze each conflicted file to understand the changes:
- Read the conflicted file to identify conflict markers
- Extract the conflicting sections between
<<<<<<<and>>>>>>> - Run git blame on both sides of the conflict
- Fetch commit messages and diffs for relevant commits
- Analyze the intent behind each change
Phase 2: Resolution Strategy
Determine the best resolution strategy for each conflict:
- Categorize changes by intent (bugfix, feature, refactor, etc.)
- Evaluate recency and relevance of changes
- Check for structural overlap vs formatting differences
- Identify if changes can be combined or if one should override
- Consider test updates and related changes
Phase 3: Conflict Resolution
Apply the resolution strategy to resolve conflicts:
- For each conflict, apply the chosen resolution
- Ensure proper escaping of conflict markers in diffs
- Validate that resolved code is syntactically correct
- Stage resolved files with
git add
Phase 4: Validation
Verify the resolution and prepare for commit:
- Run
git statusto confirm all conflicts are resolved - Check for any compilation or syntax errors
- Review the final diff to ensure sensible resolutions
- Prepare a summary of resolution decisions
Git Commands Reference
| Command | Purpose |
|---|---|
gh pr checkout [PR_NUMBER] --force |
Force checkout the PR branch |
git fetch origin main |
Get the latest main branch |
GIT_EDITOR=true git rebase origin/main |
Rebase current branch onto main (non-interactive) |
git blame -L [start],[end] [commit] -- [file] |
Get commit information for specific lines |
git show --format="%H%n%an%n%ae%n%ad%n%s%n%b" --no-patch [sha] |
Get commit metadata |
git show [sha] -- [file] |
Get the actual changes made in a commit |
git ls-files -u |
List unmerged files with stage information |
GIT_EDITOR=true git rebase --continue |
Continue rebase after resolving conflicts |
Best Practices
Intent-Based Resolution (High Priority)
Always prioritize understanding the intent behind changes rather than just looking at the code differences. Commit messages, PR descriptions, and issue references provide crucial context.
Example: When there's a conflict between a bugfix and a refactor, apply the bugfix logic within the refactored structure rather than simply choosing one side.
Preserve All Valuable Changes (High Priority)
When possible, combine non-conflicting changes from both sides rather than discarding one side entirely. Both sides of a conflict often contain valuable changes that can coexist if properly integrated.
Escape Conflict Markers (High Priority)
When using apply_diff, always escape merge conflict markers with backslashes to prevent parsing errors:
- Correct:
\<<<<<<< HEAD - Wrong:
<<<<<<< HEAD
Consider Related Changes (Medium Priority)
Look beyond the immediate conflict to understand related changes in tests, documentation, or dependent code. A change might seem isolated but could be part of a larger feature or fix.
Resolution Heuristics
| Category | Rule | Exception |
|---|---|---|
| Bugfix vs Feature | Bugfixes generally take precedence | When features include the fix |
| Recent vs Old | More recent changes are often more relevant | When older changes are security patches |
| Test Updates | Changes with test updates are likely more complete | - |
| Formatting vs Logic | Logic changes take precedence over formatting | - |
Common Pitfalls
Blindly Choosing One Side
Problem: You might lose important changes or introduce regressions. Solution: Always analyze both sides using git blame and commit history.
Ignoring PR Context
Problem: The PR description often explains the why behind changes. Solution: Always fetch and read the PR information before resolving.
Not Validating Resolved Code
Problem: Merged code might be syntactically incorrect or introduce logical errors. Solution: Always check for syntax errors and review the final diff.
Unescaped Conflict Markers in Diffs
Problem: Unescaped conflict markers (<<<<<<, =======, >>>>>>) will be interpreted as diff syntax.
Solution: Always escape with backslash (\) when they appear in content.
Apply Diff Example
When resolving conflicts with apply_diff, use this pattern:
<<<<<<< SEARCH
:start_line:45
-------
\<<<<<<< HEAD
function oldImplementation() {
return "old";
}
\=======
function newImplementation() {
return "new";
}
\>>>>>>> feature-branch
=======
function mergedImplementation() {
// Combining both approaches
return "merged";
}
>>>>>>> REPLACE
Quality Checklist
Before Resolution
- Fetch PR title and description for context
- Identify all files with conflicts
- Understand the overall change being merged
During Resolution
- Run git blame on conflicting sections
- Read commit messages for intent
- Consider if changes can be combined
- Escape conflict markers in diffs
After Resolution
- Verify no conflict markers remain
- Check for syntax/compilation errors
- Review the complete diff
- Document resolution decisions
Completion Criteria
- All merge conflicts have been resolved
- Resolved files have been staged
- No syntax errors in resolved code
- Resolution decisions are documented
Communication Guidelines
When reporting resolution progress:
- Be direct and technical when explaining resolution decisions
- Focus on the rationale behind each conflict resolution
- Provide clear summaries of what was merged and why
Progress Update Format
Conflict in [file]:
- HEAD: [brief description of changes]
- Incoming: [brief description of changes]
- Resolution: [what was decided and why]
Completion Message Format
Successfully resolved merge conflicts for PR #[number] "[title]".
Resolution Summary:
- [file1]: [brief description of resolution]
- [file2]: [brief description of resolution]
[Key decision explanation if applicable]
All conflicts have been resolved and files have been staged for commit.