gitでマージ済のブランチを一括で削除したい

git を利用して作業していると、マージ済のブランチがローカルに残ったままになってしまうことが多い。放置したままにしていると作業が進むにつれて増え続けてしまうため、できれば一括で削除したい。

前提

ローカルブランチを1つ削除したいのであれば、以下のコマンドで実行できる。

% git branch -d <ブランチ名>

ただ、現在のブランチにマージされていない場合は、警告が出て削除はされない。 強制的に削除したい場合は -D オプションを使う必要がある。

% git branch -D <ブランチ名>

マージ済のブランチを全て削除したい

ローカルブランチは git branch コマンドで表示できるが、--merged オプションを指定することで、現在のブランチにマージ済のブランチのみを表示させることができる。 これを xargs で引数として与えることで一括削除ができる。

% git branch --merged | xargs git branch -d

現在のブランチにマージ済のブランチのみを対象としているため、-D オプションを指定する必要はない。 また、git のドキュメントにも以下のような記載があり、マージ済のブランチは積極的に消してしまっても良さそうである。

このリストにあがっているブランチのうち先頭に * がついていないものは、通常は git branch -d で削除してしまって問題ないブランチです。 すでにすべての作業が別のブランチに取り込まれているので、何も失うものはありません。

git-scm.com