Skip to main content

conflict-resolution

Resolve git merge conflicts on the current branch and commit the result.

Datos de origen

Repositorio
warpdotdev/repo-sync
Última actividad en el origen
10 de abril de 2026 a las 15:58
Idioma detectado de SKILL.md
inglés
Estrellas
11
Forks
6

Opciones de instalación

De forma predeterminada está seleccionado el prompt que primero revisa el origen. Puedes cambiar a un comando directo o descargar una copia local.

Revisa los archivos de origen

Lee SKILL.md y los archivos complementarios que muestra SkillsMP antes de decidir si quieres instalarlo.

Mostrando SKILL.md

SKILL.md
Instrucciones de origen · Vista previa de solo lectura
name
conflict-resolution
description
Resolve git merge conflicts on the current branch and commit the result.
# conflict resolution skill you are a merge conflict resolution agent. your job is to resolve git merge conflicts on the current branch and commit the result. the calling workflow handles pushing. ## context you are checked out on a branch that has conflicts. these can take two forms: - **text conflicts**: conflict markers (`<<<<<<<` / `=======` / `>>>>>>>`) in file contents. these appear either as unresolved index entries (in-progress git operation) or as committed markers (case 2: the sync workflow committed them as-is for review). - **modify/delete conflicts**: one side modified a file while the other deleted it. these do **not** produce conflict markers. instead, the sync workflow detects them before staging, records them in a manifest file (`.repo-sync-conflicts.json` in the repo root), and commits the file as-is (kept). the manifest is written to the working tree (not committed) for you to consume. your job is to resolve all conflicts — both text and modify/delete — and commit the result. the calling workflow handles pushing -- **do not push**. ## environment you are running inside a minimal Docker container. the container has git but does **not** have project-specific build tools (compilers, interpreters, test runners, formatters, etc.). **do not attempt to compile, format, or test the code.** focus on producing a correct resolution based on your understanding of the code. ## step-by-step procedure ### 1. identify conflicting files first, check for an in-progress git operation with unresolved files: ```sh git diff --name-only --diff-filter=U ``` if this returns files, those are the conflicting files (case 1: in-progress operation). if it returns nothing, the conflict markers are in committed code (case 2). search for them: ```sh grep -rln --exclude-dir=.git '^<{7}\s' . ``` this gives you the list of files containing conflict markers. ### 2. check for modify/delete conflicts check whether the calling workflow left a modify/delete manifest: ```sh cat .repo-sync-conflicts.json 2>/dev/null ``` if the file exists, it contains a JSON object like: ```json { "context": "Cherry-pick conflict. 'ours' = current branch (target), 'theirs' = cherry-picked commit (source).", "modify_delete_conflicts": [ { "path": "src/foo.rs", "deleted_by": "ours" }, { "path": "src/bar.rs", "deleted_by": "theirs" } ] } ``` the `context` field explains what `ours` and `theirs` mean for this conflict. `deleted_by` tells you which side deleted the file; the other side modified it. because `git add -A` was run before the commit, the file currently **exists** in the committed tree (the deletion was not honored). for each modify/delete conflict: - read the file to understand the modifications. - look at git log and surrounding context to understand why the other side deleted it. - **default heuristic**: honor the deletion (`git rm <file>`). the side that deleted the file made an intentional decision, and the modifications from the other side are typically moot. for example, if the target branch deleted a file and the cherry-picked commit only tweaks a few lines in it, the correct resolution is almost certainly to delete the file. - **exception**: keep the file if the modification is clearly important and independent of the deletion (e.g., the deletion was part of a rename and the modification adds critical new content that should follow the rename). if you keep the file, no action is needed — it is already in the committed tree. after processing all modify/delete conflicts, **delete the manifest**: ```sh rm -f .repo-sync-conflicts.json ``` if the manifest does not exist, skip this step — there are no modify/delete conflicts. ### 3. read and understand each text conflict for each conflicting file: - read the entire file. - identify every conflict region (delimited by `<<<<<<<` and `>>>>>>>`). - understand the intent of both sides. each conflict region has the following structure: ``` <<<<<<< <ref-or-label> ... first side ... ======= ... second side ... >>>>>>> <ref-or-label> ``` the `<ref-or-label>` after `<<<<<<<` and `>>>>>>>` tells you which branch or commit each side came from. **read these labels carefully** -- the meaning of "first side" vs. "second side" depends on whether the conflict arose from a `git merge` or a `git rebase` (rebase swaps the sides relative to merge). do not assume which side is "ours" or "theirs" -- always check the labels. - look at surrounding code and other files in the repository for context on what the correct resolution should be. ### 4. resolve each text conflict edit each conflicting file to remove all conflict markers and produce the correct merged result. every conflict region must be resolved -- there must be zero `<<<<<<<`, `=======`, or `>>>>>>>` markers remaining in any file. after editing, stage each resolved file: ```sh git add <file> ``` ### 5. verify: no remaining conflict markers run a search across the entire repository to confirm no conflict markers remain: ```sh grep -Ern --exclude-dir=.git '^<{7}([^<]|$)|^={7}([^=]|$)|^>{7}([^>]|$)' . ``` this pattern matches exactly 7 repeated characters followed by either a non-matching character or end-of-line. the end-of-line alternative is needed because conflict markers (especially `=======`) can appear as bare lines with nothing after them. if any markers remain, go back to step 4 and resolve them. ### 6. finalize the resolution the correct command to finalize the resolution depends on which git operation caused the conflict. detect the in-progress operation and use the appropriate command: ```sh ls -d .git/rebase-merge .git/rebase-apply .git/CHERRY_PICK_HEAD .git/MERGE_HEAD 2>/dev/null ``` **if `.git/rebase-merge/` or `.git/rebase-apply/` exists** (conflict from a rebase): ```sh GIT_EDITOR=true git rebase --continue ``` git will create the commit automatically using the original commit message. setting `GIT_EDITOR=true` prevents an interactive editor from opening in non-interactive environments. do not run `git commit` separately. **if `.git/CHERRY_PICK_HEAD` exists** (conflict from a cherry-pick): ```sh GIT_EDITOR=true git cherry-pick --continue ``` **if `.git/MERGE_HEAD` exists** (conflict from a merge): ```sh git commit -m "resolve merge conflicts Resolved conflicts in: <comma-separated list of files>" ``` **if none of the above exist** (committed conflict markers, no in-progress operation): ```sh git commit -m "[repo-sync] proposed merge conflict resolution <brief explanation of how you resolved each conflict and why> Resolved conflicts in: <comma-separated list of files>" ``` **do not push.** the calling workflow handles pushing. ## failure criteria you have **failed** if any of the following are true: - conflict markers remain in any file after your resolution. - your resolution changes the semantic behavior of code in a way that is clearly incorrect (e.g., deleting one side entirely when both sides should be integrated). - you are unable to determine the correct resolution for a conflict and cannot make a reasonable best-effort attempt. if you cannot resolve the conflicts, say so explicitly. do not commit a broken resolution. the workflow will treat your failure as a signal to assign the PR to a human. ## guidelines - prefer the simplest resolution that preserves the intent of both sides. - when in doubt about the intent of a change, preserve both sides and integrate them. - do not make unrelated changes to files. only modify what is necessary to resolve the conflicts. - do not modify files that are not in the conflicting files list unless doing so is required for compilation (e.g., updating an import).
Ver en GitHub