Skip to content

Instantly share code, notes, and snippets.

@stephanschubert
Forked from drbrain/git-cleanup-repo
Last active November 5, 2015 15:10
Show Gist options
  • Save stephanschubert/f26346f0a45a7cce13bc to your computer and use it in GitHub Desktop.
Save stephanschubert/f26346f0a45a7cce13bc to your computer and use it in GitHub Desktop.
#!/bin/bash
# git-cleanup-repo
#
# Author: Rob Miller <[email protected]>
# Adapted from the original by Yorick Sijsling
#
# * 2015/11/05 - Fixed formatting issues (Stephan Schubert)
KEEP_BRANCHES='(master|staging|ci-[0-9]+)$'
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 | egrep -v "$KEEP_BRANCHES" | xargs git branch -d
# Now the same, but including remote branches.
MERGED_ON_REMOTE=`git branch -r --merged origin/master | sed 's/ *origin\///' | egrep -v "$KEEP_BRANCHES"`
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\///' \
| egrep -v "$KEEP_BRANCHES"
| xargs -I% git push origin :% 2>&1 \
| grep --colour=never 'deleted'
echo "Done!"
fi
fi
git checkout master &> /dev/null
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment