はじめに
マージ済みブランチを削除せず溜まってしまっているエンジニア向けに、ローカル環境から一括で削除する方法をまとめます。
記事のとおりにコマンドを実行すれば、ローカル環境に存在するブランチのうちマージ済みのものだけを一括で削除できるはずです。
問題
ローカル環境にマージ済みのブランチがかなり溜まっていたため、削除して見通しをよくしたかったです。
1つずつgit branch -d branch-nameとすれば削除できますが手間なので、一括で削除できる方法を探していました。
解決策
結論として、次の流れでコマンドを実行すればマージ済みのブランチを一括で削除できます。
$ git switch develop # ベースブランチへ移動
$ git branch --merged | grep -v "\*" | xargs git branch -d
コマンドの説明
-
git branch --merged: 現在のブランチにマージ済みのローカルブランチを一覧表示 -
grep -v "\*": 出力結果から現在のブランチ(*が付いているブランチ)を除外 -
xargs git branch -d: フィルタリングされたブランチを削除
注意点
-
未マージのブランチを削除しない:
-dオプションを付与してるため、未マージのブランチは削除されない -
現在のブランチを削除しない:
grep -v "\*"で現在のブランチを除外している
未マージのブランチも含めて強制的に削除したい場合
マージされていないブランチも含めて強制的に削除したい場合は-Dオプションを付与します。
$ git branch --merged | grep -v "\*" | xargs git branch -D
ただし重要なブランチを誤って削除しないよう注意が必要です。
補足:xargsコマンドについて
xargsは前のコマンドの出力を引数として次のコマンドに渡すためのコマンドです。
使い方の例
以下の例はコマンドAの出力結果をコマンドBの引数として渡すことを意味しています。
$ コマンドA | xargs コマンドB
今回の例
git branch --mergedで得たマージ済みブランチから*が付いているブランチ以外を、xargsでgit branch -dに渡して削除しています。
$ git switch develop # ベースブランチへ移動
$ git branch --merged | grep -v "\*" | xargs git branch -d
おわりに
gitコマンドとgrep、xargsを組み合わせることで、ローカルブランチの一括削除を効率的に行うことができました。
基本的なコマンドでも、組み合わせ次第で便利な操作が可能です。
今後もコマンドの活用方法を探求していきたいと思います。