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

開発がある程度進んできて不要なトピックブランチが増えてきたときの対処法。

バグ対応や機能修正などのたびにブランチを区切って開発していると、そのうち管理しているブランチ数が大変なことになる場合がある。
都度都度削除していれば問題ないのだが、自分のような人間はわりと放置しがちになってしまう。

そこで、「マージ済みのブランチを一括で削除できるスクリプト」があれば幸せになれるのでは、と考えた。
ググってみると早速見つかった。

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

ただし、こちらはbashでの場合になるので、fish shell環境では以下のようにエスケープが必要になる。
また、現在のブランチ以外にも開発用のブランチやmasterブランチは仮にマージ済みであったとしても削除しないように修正した。

git branch --merged | grep -v "*" | grep -v "master" | grep -v "dev" | xargs -I \% git branch -d \%

簡単に解説しておく。
git branch —mergedを実行すると、現在の作業ブランチにすでにマージ済みのローカルブランチを表示する。
ここから、削除したくないブランチをgrep -vを用いて除外していく。(現在の作業ブランチには「*」がついているので、これも除外)
最後に、残ったブランチ名をxargsを使ってgit branch -dに渡すことで削除している。(-Dを指定しまうとマージ済みでないブランチも強制削除してしまうので注意。)

あとはこれをエイリアスに登録しておくとより幸せになれる。