Skip to content

Instantly share code, notes, and snippets.

@mrkskwsnck
Forked from peterwwillis/git-prune.sh
Created May 2, 2024 12:24
Show Gist options
  • Save mrkskwsnck/db151abf6550e68d102c81811b34c030 to your computer and use it in GitHub Desktop.
Save mrkskwsnck/db151abf6550e68d102c81811b34c030 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