diff --git a/bin/git-sweep b/bin/git-sweep new file mode 100755 index 0000000..da0748e --- /dev/null +++ b/bin/git-sweep @@ -0,0 +1,30 @@ +#!/bin/bash + +git checkout master +git fetch +git remote prune origin +git branch --merged master | grep -v 'master$' | xargs git branch -d + +REMOVABLE=$(git branch -r --merged master \ + | sed 's/ *origin\///' \ + | grep -v 'master$' \ + | grep -v 'production$' \ + | grep -v 'staging$' \ + | grep -v '^release' \ + | grep -v 'next$' +) + +if [[ -z "$REMOVABLE" ]]; then + exit 0 +fi + +echo "The following remote branches are fully merged and will be removed:" +for branch in $REMOVABLE; do + echo "$branch" +done + +read -p "Continue (y/n)? " -n 1 -r +echo +if [[ $REPLY =~ ^[Yy]$ ]]; then + echo "$REMOVABLE" | xargs git push origin --delete +fi