23 Apr 2012, 09:00
Branch poisoning in git: Programmatically clean up old (merged) branchesAfter seeing that the project that I’m working on had 48 branches hanging out, 40 of which were completely merged and abandoned, I threw together a quick bit of one-liner (it’s still one line even if it’s more than 80 columns, right?) to delete all of the fully merged branches.
Full disclosure; this works on my machine, which happens to be a Win7 machine with some release of Cygwin on it (which I loathe):
for k in $(git branch -a --merged) | grep -v "\->\|master" | sed s/remotes\\/origin\\///);\
do $(git branch -d $k; git push origin :$k); done
And when you’re done, make sure you alert others to git remote prune origin
.
The breakdown
To elaborate on this a little bit, for each branch $k in every completely merged branch:
for k in $(git branch -a --merged)
Make sure that it isn’t pointing somewhere (like HEAD
would be) and isn’t master
:
| grep -v "\->\|master"
Remove the remotes/origin/
part of the branch name:
| sed s/remotes\\/origin\\///);\
Delete the local branch (if it’s there) and push the delete to the repository:
do $(git branch -d $k; git push origin :$k); done
Inspiration taken from Graham King at http://www.darkcoding.net/software/cleaning-up-old-git-branches/