はじめに
基本、マージしたブランチを手動でdeleteしているが、毎回消しているわけではないので、マージ済みブランチが溜まっていく。時々不要ブランチをコマンドで一気に消すことがあるが、ときどきしかしないので毎回どうやったか思い出しているので、やり方をメモする
ブランチ整理の時使うコマンド
git branch --merged
# マージ済みブランチ一覧を表示
git branch -d "ブランチ名"
# "ブランチ名"のブランチを削除する
--merged のオプションで、すでにマージ済みのブランチ一覧を取得し、-d で削除する。小文字のdの場合、マージされていないなら削除しないが、大文字-Dにすると強制で削除できる。ちなみに"--merged"はデフォルトだとカレントブランチにマージされたものが表示される。
数が少なければgit branch -dで消せばいいが、数が多くなってくると-dの後ろにブランチ名をコピーして貼り付ける操作がだるい。
xargsコマンド
そういう時、
「標準入力やファイルからリストを読み込み、コマンドラインを作成して実行する」xargsコマンドを使う。これは他コマンドと組み合わせて使うことが前提になっているコマンドで、パイプ(|)で繋いで使用する
git branch --merged|xargs git branch -d
こうすると、--mergedで出力されたブランチ名を一つ一つgit branch -dに渡してブランチを削除していることになる。
ただ、大抵git branch --mergedした際に消したくないブランチが含まれることが多い。今回だとdevelopとカレントブランチくらいは消したくない
最終系
git branch --merged|grep -Ev '\*|develop'|xargs git branch -d
> Deleted branch xxx (was xxxxxxxxx).
> ...
最終的に、指定した文言の含まれない結果を返す-vオプションを付けてgrepでgit branch --mergedの結果を整理する。
カレントブランチには先頭に*が付くので、\でエスケープして指定している。複数指定のために|でdevelopを指定し、環境によってはmainだったりstagingを指定することがあるかもしれないので、環境によって調節する必要がありそう。
おわりに
コマンドは時々しか使わないからどうも忘れがちになるけど、やっぱり便利。細かいところで使っていって、やり方を忘れない様にしたい。