LoginSignup
3
2

【git】マージ済のremoteブランチを一括で削除する方法

Last updated at Posted at 2024-01-21

結論

$ 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ブランチを削除
  • 実際に実行したコマンドを表示する
3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2