Resolve merge conflicts for a PR end to end.
Inputs
- Optional: PR URL or PR number.
- If missing, infer PR from current branch.
Workflow
- Create a
TodoWritelist. - Validate prerequisites:
git rev-parse --is-inside-work-treegh auth status- Working tree must be clean before starting (
git status --porcelain).
- Identify target PR:
- If user provided PR URL/number, use it.
- Else:
branch=$(git branch --show-current)gh pr list --state open --head "$branch" --json number,url,title,updatedAt- If none found, stop and ask user for PR URL/number.
- If multiple found, choose the most recently updated.
- Load PR metadata:
gh pr view <pr> --json number,url,title,headRefName,baseRefName,headRepositoryOwner
- Check out PR branch locally:
- Prefer
gh pr checkout <pr>. - If already in an in-progress merge/rebase for this PR branch, continue instead of restarting.
- Prefer
- Merge base into head to surface conflicts:
git fetch origin <baseRefName>git merge --no-ff --no-commit origin/<baseRefName>- If merge completes cleanly, commit merge and finish.
- If conflicts exist:
- List conflicted files:
git diff --name-only --diff-filter=U. - Resolve each file from first principles (do not blindly prefer ours/theirs).
- Preserve intended behavior from both sides where possible.
git addeach resolved file.- Verify no unresolved files remain.
- List conflicted files:
- Run relevant tests for changed/conflicted areas (targeted tests first).
- Finish merge:
- Ensure clean index except intended merge changes.
- Create merge commit with default merge message unless user requested custom message.
- Report:
- PR used (explicit or inferred),
- files resolved,
- tests run and results,
- any follow-up risk.
Rules
- Do not use
git checkout --theirsorgit checkout --oursas a blanket strategy. - Do not discard unrelated local changes.
- If conflict intent is ambiguous, stop and ask the user a focused question.
- Prefer minimal, behavior-preserving resolutions.