やること
ローカルブランチのうち、develop
ブランチへマージ済みのブランチを一括で削除する。
コマンド
$ git branch --merged | grep -i -v -E 'main|develop' | xargs git branch -d
.gitconfig
私は上記のコマンドを.gitconfig
に記載することで、cleanup
で実行できるようになっています。具体的には.gitconfig
に以下のように記載しています。
[alias]
cleanup = "!git branch --merged | grep -i -v -E 'main|develop' | xargs git branch -d"
これでgit cleanup
が使えるようになります。実際に使ってみると、以下のようになります。
# 現在のブランチ一覧。branchAとbranchBは既にマージ済みだとする
$ git branch
branchA
branchB
* develop
main
# cleanupの実行
$ git cleanup
Deleted branch branchA (was 0eebe36).
Deleted branch branchB (was 6549eaf).
ここまででこの記事の目的は達成しているのであとは蛇足ですが、せっかくなのでワンライナーの解説もしようと思います。
解説
git
というよりもどちらかというとunix
系のコマンドの知識になります。
| (パイプ)
はじめに、|
(パイプ)から説明します。
こちらは、前のコマンドの実行結果を後のコマンドに引き渡す役割を持ちます。
つまり、上記のコマンドgit branch --merged | grep -i -v -E 'main|develop'
の場合、git branch --merged
の結果の中からgrep
による検索が行われることになります。
例えば、git branch --merged
の結果が
* develop
main
branchA
branchB
の場合、grep -i -v -E 'main|develop'
は上記の結果に対して行われるため、
branchA
branchB
となります。
git branch --merged
git branch
コマンドは、branchの一覧を表示します。--merged
オプションを付けることでカレンとブランチにマージ済みのブランチのみが表示されます。
grep -i -v -E 'main|develop'
grep
コマンドは文字列検索のコマンドになります。grep hoge
とすることで文字列hoge
を検索することができます。
以下、使用しているオプションを見ていきます。
-i
i
オプションは、大文字と小文字を区別せずに検索をします。上記の例で言えば、hoge
もHOGE
も検索に引っかかるということです。
-v
v
オプションは、一致しない文字列を検索します。
-E
-Eは正規表現を用いた検索を可能にします。正規表現については解説すると長くなるので割愛しますが、平たく言うと「特定の文字列パターンを表す文字列」のことです。
今回の'main|develop'
という正規表現は、main
という文字列もしくはdevelop
という文字列のいずれかを指します。
まとめると、grep -i -v -E 'main|develop'
は、main
でもdevelop
でもないブランチ名を検索していることになります。
xargs git branch -d
xargs
コマンドは前のコマンドの実行結果を受け取り、xargs
の後に続くコマンド(この場合git branch -d
)の実行パラメータとします。
つまり、grep
コマンドの結果ひとつずつがgit branch -d
のパラメータとして渡されることで、main
とdevelop
を除くマージ済みのブランチが削除されることとなります。
終わりに
素敵なGitライフを!