Skip to content

Instantly share code, notes, and snippets.

@atmos
Created January 5, 2012 08:28
Show Gist options
  • Save atmos/1564252 to your computer and use it in GitHub Desktop.
Save atmos/1564252 to your computer and use it in GitHub Desktop.
clean-merged-branches
#!/bin/sh
#/ Usage: clean-merged-branches [-f]
#/ Delete merged branches from the origin remote.
#/
#/ Options:
#/ -f Really delete the branches. Without this branches are shown
#/ but nothing is deleted.
set -e
# show usage maybe
[ "$1" = "--help" ] && {
grep '^#/' <"$0"| cut -c4-
exit 0
}
# fetch and prune remote branches
git fetch origin --prune
# grab list of merged branches
branches=$(
git branch -a --merged |
grep remotes/origin/ |
grep -v /master |
sed 's@remotes/origin/@@'
)
# bail out with no branches
[ -z "$branches" ] && {
echo "no merged branches detected" 1>&2
exit 0
}
# delete the branches or just show what would be done without -f
if [ "$1" = -f ]; then
git push origin $(echo "$branches" | sed 's/^ */:/')
else
echo "These branches will be deleted:" 1>&2
echo "$branches"
echo "Run \`$0 -f' if you're sure."
fi
@atmos
Copy link
Author

atmos commented Jan 5, 2012

This lives in script/ in github, I love it so much.

@chrisledet
Copy link

I've been looking for something like this. Thanks for sharing it!

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