結論
$ git branch --remotes --merged=origin/develop | grep -v "origin/master" | grep -v "origin/develop" | sed -E 's/ origin\/(.*)/\1/' | xargs -t -I {} git push origin :{}
コマンドの説明
remoteブランチの削除
単純にremoteブランチを削除する方法は以下です。
削除対象ブランチ名:deleteTargetBranch
$ git push origin :deleteTargetBranch
$ git push origin :[削除するブランチ名]
なので、削除したいブランチを一つずつ上記のように指定していけば、力業で消していくことも可能です。
例として、削除したいブランチが以下の3つあって場合
- origin/feature1
- origin/feature2
- origin/feature3
$ git push origin :feature1
$ git push origin :feature2
$ git push origin :feature3
とすればOK
ただこれだと数が増えた時面倒なので、削除したいブランチ名を、入力として受け取ってやればよい。
そこで、まずブランチ(今回だとorigin/develop)にマージされたブランチの一覧を出力します。
$ git branch --remotes --merged=origin/develop
origin/feature1
origin/feature2
origin/feature3
// リモートリポジトリの一覧を表示
$ git branch --remotes
// [対象のブランチ]にマージされたブランチの一覧を表示
$ git branch --remotes --merged=[対象ブランチ]
// おまけ:今いるブランチにマージされたブランチの一覧を表示したい場合は以下
$ git branch --remotes --merged
念のために削除されたら困るブランチを「grep -v」明示的に外しておきます。
$ git branch --remotes --merged=origin/develop | grep -v "origin/master" | grep -v "origin/develop"
// マッチした行は非表示
$ grep -v [文字列]
上で記載した「remoteブランチの削除」にある通り、
remoteブランチを削除する際には[origin/feature1]の[origin/]の部分は不要となります。
なので、sedコマンドを使って、[origin/]を除いてあげます。
$ git branch --remotes --merged=origin/develop | grep -v "origin/master" | grep -v "origin/develop" | sed -E 's/ origin\/(.*)/\1/'
feature1
feature2
feature3
// 拡張正規表現を使うことの宣言
$ sed -E
// origin/hoge を hoge に置換
sed -E 's/ origin\/(.*)/\1/
最後に、出力された削除対象のブランチを引数にとって、削除コマンドに送ってあげる。
$ git branch --remotes --merged=origin/develop | grep -v "origin/master" | grep -v "origin/develop" | sed -E 's/ origin\/(.*)/\1/' | xargs -t -I {} git push origin :{}
// 実行したコマンドを表示
$ xargs -t
// 標準入力から受け取ったものをfugaと置換
$ xargs -I fuga echo fuga
// 以下の場合、標準入力でfeature1という文字列を受け取ったら、
// git push origin :feature1 のように置換され実行されます
xargs -I {} git push origin :{}
という流れになっています。
なので、結論にあるコマンドを日本語訳すると以下のようになります。
- origin/develop にマージされたブランチを一覧で表示
- その中で、origin/masterとorigin/developを除く
- 出力されたブランチ名の「origin/」の文字列を削除
- 出力された(feature1等)を引数にremoteブランチを削除
- 実際に実行したコマンドを表示する