bashbeginner

Git Remote Prune and Branch Cleanup

Clean up stale remote-tracking branches and local branches that have been merged or deleted upstream.

bash
# 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.