Git でマージ済みのブランチを一括削除する

More than 1 year has passed since last update.

すでにマージ済みのブランチをまとめて削除するには以下のようにする (master ブランチを checkout していると仮定する)

$ git branch --merged | grep -v '*' | xargs -I % git branch -d %
Deleted branch foo (was ce1b0d5).
Deleted branch bar (was 7623b2b).
Deleted branch baz (was d4c396d).

長いのでエイリアスをはるとよい。シェルの特殊文字 * のエスケープが必要なことに注意。

$ git config --global alias.delete-merged-branches '!git branch --merged | grep -v \* | xargs -I % git branch -d %'

以下のように設定されていれば、以降は git delete-merged-branches で実行できる。

$ git config --list  | grep alias.delete-merged-branches
alias.delete-merged-branches=!git branch --merged | grep -v \* | xargs -I % git branch -d %
~/.gitconfig
[alias]
        delete-merged-branches = !git branch --merged | grep -v \\* | xargs -I % git branch -d %

2015/03/18 改訂

  • git-flow ライクなブランチ運用ルールを採用している場合に master ブランチまで消してしまってびっくりする問題を修正
  • 以下のコードスニペットをシェルスクリプトにしたものを GitHub で公開
git branch --merged | grep -vE '^\*|master$|develop$' | xargs -I % git branch -d %

自分は以下のようなエイリアスを作って git fetchgit pull したとき同時に実行されるようにしている(シェルスクリプト git-delete-merged-branches をパスの通った場所にインストールしておくこと)

~/.gitconfig
[alias]
        fp = !git fetch -p && git-delete-merged-branches
        pp = !git pull -p && git-delete-merged-branches
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.