Created
April 26, 2011 19:19
-
-
Save schacon/942899 to your computer and use it in GitHub Desktop.
delete all remote branches that have already been merged into master
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$ git branch -r --merged | | |
grep origin | | |
grep -v '>' | | |
grep -v master | | |
xargs -L1 | | |
awk '{split($0,a,"/"); print a[2]}' | | |
xargs git push origin --delete |
Here's a bash version, that doesn't rely on awk
or sed
or xargs
.
for branch in $(git branch -r --merged master | grep origin | grep -v develop | grep -v master);
do
git push origin --delete "${branch##*/}";
done
Here's a bash version, that doesn't rely on
awk
orsed
orxargs
.for branch in $(git branch -r --merged master | grep origin | grep -v develop | grep -v master); do git push origin --delete "${branch##*/}"; done
Clearest solution I've seen, it makes the intent much more explicit than a long chain of awk/sed/xarg calls.
Only thing I'd add is that it doesn't quite work for branches that have a '/' in the name - if branch="origin/foo/bar" then ${branch##*/} will be "bar" and not "foo/bar"! You can fix by using the non-greedy single # to match the substring:
for branch in $(git branch -r --merged master | grep origin | grep -v develop | grep -v master)
do
git push origin --delete "${branch#*/}"
done
My solution to prune merged branches from local + multiple remotes, based on snippets above:
https://gist.github.com/ryanc414/f7686d2c97808b41ed8518a5840e2d78
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Could you replace the current awk statement that resides in the gist file with the suggestion by @catsby, i.e.
awk '{sub(/origin\//,"");print}'
?