Git Remote Prune and Branch Cleanup
Clean up stale remote-tracking branches and local branches that have been merged or deleted upstream.
# Prune remote-tracking branches that no longer exist on remote
git fetch --prune
# or
git remote prune origin
# Auto-prune on every fetch (set globally)
git config --global fetch.prune true
# List remote-tracking branches
git branch -r
# List branches merged into main (safe to delete)
git branch --merged main
# Delete merged local branches (excluding main/master/develop)
git branch --merged main | \
grep -vE '(main|master|develop|\*)' | \
xargs -r git branch -d
# List branches NOT merged into main
git branch --no-merged main
# Delete a specific local branch
git branch -d feature/old-feature # safe (checks merge)
git branch -D feature/old-feature # force (no merge check)
# Delete a remote branch
git push origin --delete feature/old-feature
# One-liner: prune + delete all merged local branches
git fetch --prune && \
git branch --merged main | grep -vE '(main|master|develop|\*)' | xargs -r git branch -d
# Show branches with last commit date (find stale ones)
git for-each-ref --sort=-committerdate refs/heads/ \
--format='%(committerdate:short) %(refname:short)'Use Cases
- Keeping local repository tidy
- Removing stale feature branches after merging
- Periodic repo maintenance scripts
Tags
Related Snippets
Similar patterns you can reuse in the same workflow.
Rename Git Branch (Local and Remote)
Commands to rename a local and remote Git branch including updating tracking references.
Best for: Fixing branch naming convention mistakes
Delete Remote Git Branch
Commands to delete local and remote branches, prune stale references, and clean up merged branches.
Best for: Cleaning up after merged pull requests
Git Force Push Safely
Use force-with-lease instead of force push to prevent overwriting teammates' commits on remote.
Best for: Pushing after rebase without overwriting others' work
Git Repository Cleanup and Maintenance
Commands for cleaning untracked files, pruning refs, optimizing repo size, and maintenance tasks.
Best for: Reducing repository size and improving performance