git branch -r --merged master | grep -v -e master -e develop | sed -e 's% *origin/%%' | xargs -I% git push --delete origin %
- remote の master に merge済み の branch をすべて表示して
- master と develop は消えてほしくないので除外して
- origin/ を削除して
- xargs (-I% % で ブランチ名を渡しつつ、全て削除する)
$ git branch --merged master | grep -vE '^\*|master$|develop$' | xargs -I % git branch -d %
- local の master に merge済み の branch をすべて表示して
- master と develop は消えてほしくないので除外して
- xargs (-I% % で ブランチ名を渡しつつ、全て削除する)
便利なコマンドをありがとうございます、大変助かりました。
うまく動かない場合があったのでご報告させていただきます。
例えば
fix_master
という名前のブランチを作てマージして不要になったとしても、上記のコマンドでは消すことができません。末尾が
master
となっているので削除対象から外れてしまいます。grepの部分の正規表現を
grep -vE '^\*|\<master\>|\<develop\>'
とするとうまく動いたのでご報告します。(
^master$
だと、git branch
が先頭に空白を入れた状態でブランチ名を出力するのでうまく動きません)