mergelisted
Install: claude install-skill JHostalek/dotclaude
input = $ARGUMENTS
Merge target branch into current branch via `git merge origin/{target}` (remote-tracking ref, not local). Goal: integrate upstream changes with no orphaned symbols, no broken migration chain, and a conventional commit message that passes hooks.
Read at the point of use, not up front:
- Conflicts → `~/.claude/skills/shared/conflict-heuristics.md`
- Migration files touched → `~/.claude/skills/shared/migration-reconciliation.md`
## Merge Commit Message
Pre-commit hooks often reject default `Merge branch 'X' into Y`. Pass conventional commit explicitly:
```
git merge origin/{target} -m "chore: merge {target} into {current-branch}"
```
Same format for follow-up `git commit` after staging resolutions. Notable decisions → commit body.
## Squash-Merged Target
Targets that squash on merge keep no copy of the branch's commits, so merging back duplicates each one beside its squashed twin — count inflates, content does not.
Counts cannot detect this; content can. `git diff origin/{target} HEAD` empty means the trees already match. Verify both index and worktree are clean, then use `git reset --keep origin/{target}` to align the branch pointer; it refuses rather than overwriting local changes. Non-empty means real divergence: merge normally. Originals stay server-side at `refs/merge-requests/<iid>/head` or `refs/pull/<n>/head`, outside the default refspec.
## Execution
State divergence (commits ahead/behind) and target branch before merging — do not skip to t