fix-merge-conflicts · git:20260831.856ee57 · 2026-08-31 · sha256 ada35e42bf199b79

fix-merge-conflicts git:20260831.856ee57A

Immutable. This exact content is served forever at /api/v1/blob/ada35e42bf199b79.

---
name: fix-merge-conflicts
description: Resolve merge conflicts non-interactively, validate build and tests, and finalize conflict resolution
origin:
  type: first-party
metadata:
  inspired_by:
    - repository: cursor/plugins
      path: cursor-team-kit/skills/fix-merge-conflicts
      ref: 60c641e4fad674784b30abcf9f8915dea39df38d
      note: Detect conflicting files via git status/markers, minimal correctness-first merges, regenerate lockfiles instead of hand-editing, validate via compile/lint/tests
---

# Fix Merge Conflicts

Resolve merge conflicts non-interactively and return the branch to a buildable state.

## When to use

- `git status` shows `Unmerged paths` or `CONFLICT`, or the branch reports merge conflicts against `main`.
- User asks to "fix merge conflicts", "resolve conflicts", "rebase and fix", or "make this branch mergeable".
- A PR is blocked by conflicts after pulling main.

## Prerequisites

- Inside a Git repository with write access (`git status` works).
- Conflicts come from a merge or rebase (e.g. `git merge main`, `git pull --rebase`, `gh pr update-branch`).
- Toolchain available for validation: package manager (`npm`/`yarn`/`pnpm`/`bun`/`uv`/`cargo`/etc.) and `git`.

## Workflow

1. **Detect conflicts.** Run `git status --porcelain` and scan for `UU`/`AA`/`DD`/`U*` markers. Confirm with `grep -r "<<<<<<< " --include="*.md" --include="*.ts" --include="*.js" --include="*.py" --include="*.v" --include="*.yaml" --include="*.json" -l` (and `git diff --check` for leftover markers). List every conflicting file.

2. **Resolve each conflict with minimal, correctness-first edits.** Open each file, read the `<<<<<<< / ======= / >>>>>>>` hunks, and choose the merge that compiles and preserves public behavior. Prefer preserving both sides when safe; otherwise pick the variant that keeps the build green and does not change external API semantics. Keep edits readable — no broad refactors while resolving.

3. **Regenerate lockfiles via the package manager — do not hand-edit.** If a lockfile is conflicted (`package-lock.json`, `yarn.lock`, `pnpm-lock.yaml`, `bun.lockb`, `Cargo.lock`, `uv.lock`, `go.sum`, `Gemfile.lock`, etc.), discard conflict markers and regenerate: `npm install --package-lock-only`, `yarn install`, `pnpm install`, `bun install`, `cargo update --workspace`, `uv lock`, or the repo's documented install command. Confirm the manager that owns the file (check `package.json` `packageManager`, `Makefile`, or `README.md`).

4. **Validate.** Run compile, lint, and the most relevant tests for the touched areas. At minimum:
   ```bash
   git diff --check  # no leftover markers / whitespace issues
   # then per-stack, e.g.:
   # npm run build  /  cargo check  /  v vet  /  make build
   # npm run lint   /  ruff check .  /  ./scripts/validate-skills.vsh
   # npm test -- <changed packages>  /  pytest -q <changed modules>
   ```
   Re-run until the working tree is clean of markers and the build succeeds.

5. **Stage and finalize.** `git add <resolved files>` then `git status` to confirm no remaining `Unmerged` paths. If a rebase/merge was in progress, run `git rebase --continue` or `git commit` as appropriate (no `git push` or `git tag` from this skill — delegate to `github-cli-workflow`).

6. **Summarize decisions.** Report: files resolved, notable resolution choices (why each hunk was kept/merged), lockfile regeneration performed, and build/test outcome with next action.

## Guardrails

- Keep changes minimal and readable.
- Do not leave conflict markers (`<<<<<<<`, `=======`, `>>>>>>>`) in any file.
- Avoid broad refactors while resolving conflicts — only what is needed to make the merge buildable.
- Do not push, tag, or force-push during conflict resolution. Delegate pushes to `github-cli-workflow` after user confirmation.
- Do not hand-edit lockfiles; always regenerate via the owning package manager.

## Output

- Files resolved (with hunk-level rationale where non-trivial)
- Notable resolution choices
- Build/lint/test outcome
- Next step (continue rebase / commit / push via `github-cli-workflow`)