Git コマンド1つでマージ済みのブランチをまとめて削除
Git コマンド1つでマージ済みのブランチをまとめて削除
2019/07/02

開発が完了して使わなくなったブランチがローカルに大量に残ってしまう。
定期的に整理しないと、新しくプッシュしたブランチを探すのに一苦労なんてことも。

git-find-branch

ということで、コマンド1つでマージ済みのブランチをまとめて削除する方法をご紹介。

こちらのやり方を参考にさせていただきました。(まんまでは、エラーになってしまったので修正しています。)

git delete-merged-branch develop でdevelopブランチにマージ済みのブランチを削除できるようにします。

設定

.gitconfigに設定を書きます。

$ vim ~/.gitconfig

以下のコードを追記する。

[alias]
       delete-merged-branch = "!f () { git checkout $1; git branch --merged | egrep -v '(\\*|develop|master)' | xargs git branch -d; }; f"

実行

まとめてブランチを削除するコマンドを、gitに登録したので実行させるだけ。

developブランチにマージ済みのブランチを削除したければ、

$ git delete-merged-branch develop

masterブランチにマージ済みのブランチを削除したければ、

$ git delete-merged-branch master

となります。

以上で、ブランチをまとめて削除することができました。

仕組み

登録したコマンドを分解して見ていきましょう。

checkout

git checkout $1

Switched to branch '$1''

こちらは、引数で渡された値にチェックアウトします。
git delete-merged-branch developであれば、developブランチにチェックアウトします。

branch --merged

git branch --merged

* develop
  fix/permit-status-list

現在のブランチにマージされているブランチを表示します。

egrep

| egrep -v '(\\*|develop|master)' 

egrepは、*, develop, master以外の入力された値を返します。

ここでは、|で繋げているので、「現在のブランチにマージされているブランチの中で、*, develop, master以外のブランチを返す」となります。

xargs

| xargs git branch -d

xargsで前のコマンドで出力された値を、次のコマンドの入力にします。

$ seq 10 | xargs echo
1 2 3 4 5 6 7 8 9 10

seqは数列を出力するコマンドです。

ですので、「上で出力されたブランチを削除する」となります。

最後に関数化してコマンドの完成です。

まとめ

ローカルにブランチが溜まってきたな〜と思ったら、git delete-merged-branch develop で一発ですっきりです!

ちまちま削除する作業から開放されました!