Skip to content

Instantly share code, notes, and snippets.

@robmiller
Last active February 27, 2024 10:09
Show Gist options
  • Save robmiller/5133264 to your computer and use it in GitHub Desktop.
Save robmiller/5133264 to your computer and use it in GitHub Desktop.
A script for cleaning up Git repositories; it deletes branches that are fully merged into `origin/master`, prunes obsolete remote tracking branches, and as an added bonus will replicate these changes on the remote.
#!/bin/bash
# git-cleanup-repo
#
# Author: Rob Miller <rob@bigfish.co.uk>
# Adapted from the original by Yorick Sijsling
git checkout master &> /dev/null
# Make sure we're working with the most up-to-date version of master.
git fetch
# Prune obsolete remote tracking branches. These are branches that we
# once tracked, but have since been deleted on the remote.
git remote prune origin
# List all the branches that have been merged fully into master, and
# then delete them. We use the remote master here, just in case our
# local master is out of date.
git branch --merged origin/master | grep -v 'master$' | xargs git branch -d
# Now the same, but including remote branches.
MERGED_ON_REMOTE=`git branch -r --merged origin/master | sed 's/ *origin\///' | grep -v 'master$'`
if [ "$MERGED_ON_REMOTE" ]; then
echo "The following remote branches are fully merged and will be removed:"
echo $MERGED_ON_REMOTE
read -p "Continue (y/N)? "
if [ "$REPLY" == "y" ]; then
git branch -r --merged origin/master | sed 's/ *origin\///' \
| grep -v 'master$' | xargs -I% git push origin :% 2>&1 \
| grep --colour=never 'deleted'
echo "Done!"
fi
fi
@afarooki-point
Copy link

@MacDoogle this is a bash script (look at the first line of the script), you can add the .sh extension to it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment