Learn-skills.dev git-worktree-tidy
Fetch latest from origin, prune remote-tracking refs, delete stale local branches and worktrees, and fast-forward important branches. Use when tidying up a worktree-based repo layout.
git clone https://github.com/NeverSight/learn-skills.dev
T=$(mktemp -d) && git clone --depth=1 https://github.com/NeverSight/learn-skills.dev "$T" && mkdir -p ~/.claude/skills && cp -r "$T/data/skills-md/0xbigboss/claude-code/git-worktree-tidy" ~/.claude/skills/neversight-learn-skills-dev-git-worktree-tidy && rm -rf "$T"
data/skills-md/0xbigboss/claude-code/git-worktree-tidy/SKILL.mdgit-worktree-tidy
Routine hygiene for bare-repo + worktree layouts. Fetches origin, prunes gone branches and orphaned worktrees, and fast-forwards important local branches.
When to use
User asks to "fetch prune", "clean up stale branches/worktrees", or "update main/dev to latest" in a worktree-based repo.
Hard Rules
- All destructive actions (worktree remove, branch delete) require user confirmation. Present the full list and wait.
- Never force-delete a worktree with uncommitted changes without explicit approval. Flag dirty worktrees separately.
- Use
when updating branches. If ff-only fails, stop and ask.--ff-only - Operate from the
directory (or repo root) for branch/worktree management commands..bare
Workflow
1) Locate the bare root
Determine the bare repo directory:
- If cwd contains
, use it.bare/ - Otherwise:
git rev-parse --git-common-dir
All branch and worktree management commands run from this directory.
2) Fetch + prune
git fetch --prune origin
Report what was pruned (deleted remote-tracking branches, updated refs).
3) Discover stale branches
git branch -vv | grep ': gone]'
Collect branch names whose upstream is gone.
4) Discover stale worktrees
git worktree list git worktree prune --dry-run
Cross-reference worktrees against the gone-branch list. Check each stale worktree for dirty state:
cd <worktree-path> && git status --short
Categorize:
- Clean + gone: safe to remove
- Dirty + gone: flag for user review
- Prunable metadata: orphaned worktree entries (directory already gone)
5) Confirm deletions
Present a summary table:
Stale worktrees to remove: <path> (<branch>) [clean] <path> (<branch>) [dirty — N uncommitted changes] Stale branches to delete: <branch> Prunable worktree metadata: <entry>
Wait for user confirmation before proceeding.
6) Remove stale worktrees
For each confirmed worktree:
git worktree remove <name>
If removal fails (dirty), report and skip unless user approved force.
7) Delete stale branches
git branch -D <branch1> <branch2> ...
8) Prune worktree metadata
git worktree prune -v
9) Update important branches
Identify which branches have dedicated worktrees for
main, dev, or
other important branches (user may specify). For each:
cd <worktree-path> && git pull --ff-only origin <branch>
If ff-only fails, report the divergence and ask for guidance.
10) Final status
Show a summary: what was removed, what was updated, any items skipped.