Back to Commands

Worktree Cleanup

Commands git-workflow 93 Scanned by NVIDIA SkillSpector

Clean up merged worktrees and their branches

Install Command
npx claude-code-templates@latest --command git-workflow/worktree-cleanup
View on GitHub
claude-code — worktree-cleanup

Scanned by NVIDIA SkillSpector

Automated static analysis (no LLM) · v2.12.0 · 2026-10-17

0 observations
scanner score 0/100

SkillSpector looks for patterns such as shell commands, credential access, network calls or unpinned dependencies. An observation is something worth reading in the files before you install, not a confirmed vulnerability. Components that run code locally, like hooks, MCP servers and security tooling, naturally show more of them.

No observations.

Learn more about NVIDIA SkillSpector.

Content

Worktree Cleanup

Remove worktrees and branches that have been merged: $ARGUMENTS

Instructions

You are in the main repository (not a worktree). Clean up finished worktrees.

Branch Patterns

This project uses the following branch prefixes for worktrees:

  • claude/* — Claude Code auto-created worktrees
  • claude-daniel/* — User-created worktrees
  • review/* — Component review worktrees

All three prefixes must be checked in every step below.

Step 1: Validate Environment

  1. Verify this is the main working tree (first entry in git worktree list)
  2. If inside a worktree, warn: "Run /worktree-cleanup from the main repo, not from a worktree."
  3. Fetch latest from origin: git fetch origin --prune
  4. Get the main branch name (main or master)

Step 2: Parse Arguments

Parse $ARGUMENTS for options:

  • --all — clean up ALL merged worktrees and branches
  • --branch <prefix>/<name> — clean up a specific worktree/branch
  • --dry-run — show what would be cleaned up without doing anything
  • --force-all — remove ALL worktrees regardless of merge status (asks confirmation per worktree)
  • No arguments — list worktrees and ask which to clean up

Step 3: Identify Worktrees

  1. List all worktrees: git worktree list
  2. List all matching branches:
    bash
    git branch --list 'claude/*' 'claude-daniel/*' 'review/*'
  3. For each matching branch, check if it's been merged into main:
    bash
    git branch --merged origin/<main-branch> | grep -E '^\s+(claude/|claude-daniel/|review/)'
  4. Also check remote branches:
    bash
    git branch -r --merged origin/<main-branch> | grep -E 'origin/(claude/|claude-daniel/|review/)'
  5. For squash-merged branches (not detected by --merged), check if the branch diff is empty against main:
    bash
    # A branch is effectively merged if its changes already exist in main
    git diff origin/main...<branch> --stat
    If the diff is empty or very small (only whitespace), consider it merged.

Step 4: Display Status

Show a table of all worktrees/branches:

| # | Worktree | Branch | Merged? | Dirty? | Action |
|---|---------|--------|---------|--------|--------|
| 1 | eager-mendeleev | claude/eager-mendeleev | Yes | Clean | Will remove |
| 2 | agent-a7e312d0 | review/code-reviewer-2026-04-01 | No | Clean | Skipped |

Step 5: Confirm and Execute

If --dry-run was specified, show the table and stop.

Otherwise, use AskUserQuestion to confirm cleanup (unless --all was specified with only merged branches).

For each worktree/branch to clean up:

  1. Remove the worktree:

    bash
    git worktree remove <path>

    If that fails (dirty worktree), warn and skip — never force-remove.

  2. Delete the local branch:

    bash
    git branch -d <branch>

    Use -d (not -D) for merged branches. For --force-all unmerged branches, use -D only after explicit user confirmation.

  3. Delete the remote branch (if it exists):

    bash
    git push origin --delete <branch>

    If the remote branch doesn't exist, ignore the error silently.

Step 6: Prune

After all removals:

bash
git worktree prune

Step 7: Summary

Show what was cleaned up:

Cleanup Complete
──────────────────────────────────
Removed:  <N> worktree(s)
Deleted:  <N> local branch(es)
Deleted:  <N> remote branch(es)
Skipped:  <N> unmerged branch(es)
──────────────────────────────────

If any unmerged branches were skipped, list them and suggest:

  • Merge the PR first, then run cleanup again
  • Or use git worktree remove <path> and git branch -D <branch> manually if the work is truly abandoned

Stack Builder

0 components

Your stack is empty

Browse components and click the + button to add them to your stack for easy installation.