name: git-cleanup-merged description: Clean up local branches and worktrees that have been merged into a target branch (default: main). Args: [target-branch]
Git Cleanup Merged
Clean up local branches and worktrees whose changes have already been merged into a target branch.
Args
/git-cleanup-merged [target-branch]
target-branch— branch to check against. Default:main.
Refer to the target branch as $TARGET below.
Workflow
1. Detect merged branches
Use the git-detect-merged skill with $TARGET to identify all merged branches, their merge type, active work status, and associated worktrees.
- Treat untracked files under
.tmp/as ignorable temp output, not active work.
2. Build cleanup candidates
From the detection results:
- Include branches that are merged AND have no active work (status:
clean). - Include worktrees whose branch is merged AND clean.
- Exclude
$TARGETandmain— NEVER delete either. - Exclude branches with active work (dirty or checked-out), even if merged.
- If
.tmp/is the only untracked content, still treat worktree as clean.
3. Present summary
Show the user a single summary listing:
- Worktrees to remove (path + branch)
- Branches to delete (name + merge type: regular/squash). Mark squash-merged branches as requiring
-D—git branch -dcannot see squash merges and always fails on them. - Skipped — merged branches/worktrees excluded due to active work, with the reason (e.g. "has uncommitted changes", "currently checked out")
If nothing to clean, say so and stop.
4. Confirm
Ask the user for a single confirmation before proceeding. Do NOT proceed without approval. This confirmation covers -D for branches marked squash-merged in the summary — their merge was already verified by patch-id in detection.
5. Execute cleanup
- Remove worktrees first (
git worktree remove <path>), then delete branches. - Regular merges →
git branch -d <branch>. Squash merges →git branch -D <branch>(covered by step 4 confirmation). - If
-dunexpectedly fails on a regular-merge branch, ask the user before using-D. - Report results after each step.
Rules
- NEVER delete
$TARGETormain. - NEVER touch remote branches or remote tracking refs.
- Use
-d(safe delete) for regular merges.-Dfor squash-merged branches is pre-approved by the step 4 confirmation; any other-Drequires explicit user approval. - If a worktree removal fails, report the error and continue with the remaining items.
- If a branch delete fails, report the error and continue with the remaining items.