Gitのマージ済みのリモートブランチをカッとなって一括で消す方法
% git branch -r --merged | grep -v origin/master | perl -pE 's!^\s*origin/!!' | xargs git push --delete origin
あとは、git fetch --prune
とかやれば、git branch -r
もスッキリして良い。
--merged
にorigin/master
とかが現れるので、grep -v origin/master
とかやって無理やり抜いてある。git flowとかでdevelopブランチとか作ってる場合はそれも抜いてやる必要ありそう。
その辺の--merged
の判定がよくわからない(どこかにマージ後にコミットが発生したブランチとかもリストされちゃうとか?)、うっかり思わぬブランチを消してしまうかもしれないので、とにかく「カッとなった」時に自己責任でオススメ。
あと、githubのhookとかをIRCに流す設定しておくと大変なことになる(なった)。とりあえずカッとなって120個くらいブランチ消したの所存。
もっといい方法あったら教えて下さい。
追記: git-prune-remote-branch ってのがありました
ブコメでnihenさんに教えてもらいました。
http://blog.kyanny.me/entry/2012/09/27/022430
さしみさんが作ってたわー。やってることだいたい同じだけど、git flowを考慮してmasterとdevelop抜いてあるのでちゃんとしてますね。