開発が完了して使わなくなったブランチがローカルに大量に残ってしまう。
定期的に整理しないと、新しくプッシュしたブランチを探すのに一苦労なんてことも。
ということで、コマンド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
で一発ですっきりです!
ちまちま削除する作業から開放されました!