Skip to content

Instantly share code, notes, and snippets.

@tonioriol
Last active May 19, 2016 08:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tonioriol/9dd4f31a29a851f687db to your computer and use it in GitHub Desktop.
Save tonioriol/9dd4f31a29a851f687db to your computer and use it in GitHub Desktop.
git cleanup merged branches
############################################################################
# DELETE ALL BRANCHES THAT ALREADY ARE MERGED INTO MASTER (except develop) #
############################################################################
# @source: http://stackoverflow.com/a/18143078/1126075
# 1. checkout
git checkout master
# 2. echo all remote branches merged into origin/master except origin/master and origin/develop
git branch -r --merged | grep -v master | grep -v develop | sed 's/origin\///' | xargs -n 1 echo
# Ask if
echo -n "Do you want to delete all this merged branches (y/n)? "
read answer
if echo "$answer" | grep -iq "^y" ;then
# 3. DELETE all remote branches merged into origin/master except self(origin/master) and origin/develop
git branch -r --merged | grep -v master | grep -v develop | sed 's/origin\///' | xargs -n 1 git push --delete origin
# 4. prune the remote deleted branches from local too
git remote prune origin
echo "All branches has been deleted"
else
echo "Cancelled."
fi
#############
# ONE LINER #
#############
# local
# print merged local branches
git branch --merged | grep -v '\*\|master\|develop' | xargs -n 1 echo
# delete local branches
git branch --merged | grep -v '\*\|master\|develop' | xargs -n 1 git branch -d
#remote
# print merged remote branches
git branch -r --merged | grep -v '\*\|master\|develop' | sed 's/origin\///' | xargs -n 1 echo
# delete remote branches
git branch -r --merged | grep -v '\*\|master\|develop' | sed 's/origin\///' | xargs -n 1 git push --delete origin
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment