| name | clean-branches |
| description | Delete local branches whose remote has been deleted ([gone]), including their worktrees. Use for branch cleanup after merging PRs. |
Clean Branches
Remove local branches that have been deleted on the remote (marked [gone]), including any associated git worktrees.
Steps
-
Fetch and prune remote refs:
git fetch --prune
-
List branches to identify [gone] status:
git branch -v
Branches with a + prefix have associated worktrees that must be removed before deletion.
-
List worktrees for reference:
git worktree list
-
Remove worktrees and delete [gone] branches:
git branch -v | grep '\[gone\]' | sed 's/^[+* ]//' | awk '{print $1}' | while read branch; do
echo "Processing branch: $branch"
worktree=$(git worktree list | grep "\\[$branch\\]" | awk '{print $1}')
if [ ! -z "$worktree" ] && [ "$worktree" != "$(git rev-parse --show-toplevel)" ]; then
echo " Removing worktree: $worktree"
git worktree remove --force "$worktree"
fi
echo " Deleting branch: $branch"
git branch -D "$branch"
done
-
Report which branches and worktrees were removed. If none were [gone], say no cleanup was needed.