Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@peterwwillis
Created July 28, 2018 18:58
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save peterwwillis/a45b70bf945f2db1571199e0546fdda8 to your computer and use it in GitHub Desktop.
Save peterwwillis/a45b70bf945f2db1571199e0546fdda8 to your computer and use it in GitHub Desktop.
Prune Git's local orphan references, merged feature branches, remote tracking references, and more
#!/bin/bash
# Prune local orphan refs
git prune -v
# Deletes all stale (local) remote-tracking branches under origin.
# These stale branches have already been removed from the remote repository
# referenced by <name>, but are still locally available.
git remote prune origin
# After fetching, remove any remote-tracking references that no longer exist on the remote.
git fetch --all --prune
# Delete all local branches that are already merged into master (excluding master, dev, and current branch)
git branch --merged master | sed -e 's/^[[:space:]]\+//g' | egrep -v "(^\*|master|dev)" | xargs git branch -d
# Delete all *remote* branches in origin that are already merged into master:
git push &&
git pull &&
git branch -r --merged master | sed -e 's/^[[:space:]]\+//g' | egrep -v "(^\*|master|dev)" | grep ^origin/ | sed -e 's/^origin\///g' | xargs -n 1 git push --delete origin
# Clean up removed remotes again, just in case
git remote prune origin
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment