【Git】マージ済のローカルブランチを一斉削除する

  • Git

いろんなブランチにチェックアウトしていると、いつの間にか不要なブランチが増えていきます。いらなくなったローカルブランチを削除する方法です。

やり方

まず、ローカルにあるマージ済のブランチ一覧を出力します。

git branch --merged

ここでは master や main、develep など、マスターブランチも含まれます。このブランチを削除する必要はないので、削除したくないブランチを除外します。

git branch --merged | egrep -v "(^\*|master|main)"

egrep で渡された文字列から正規表現で行を抜き出すことができます。ここでは、mainmaster除外した行を抜き出します。

すると、master と main が除外されたブランチの一覧が表示されたと思います。このブランチを一斉に削除してみましょう。ブランチの削除は git branch -d ブランチ名 です。

git branch --merged | egrep -v "(^\*|master|main)" | xargs git branch -d

xargs コマンドを使うことで、git branch -d の後には空白となっていますが、実際は先ほどのブランチ一覧の文字列が渡されています。そのため、一覧化したブランチを一斉削除できます。xargs は何かと便利なので活用していきたいところです。

シェルスクリプト

コマンドにしてみました。一回削除対象のブランチを出力し、y で削除実行します。

echo "Delete merged local branches (exclude master and main)"

# check
git branch --merged | egrep -v "(^\*|master|main)"

# confirmation
read -n1 -p "delete listed branches? (y/N): " yn

if [[ $yn = [yY] ]]; then
  # exec deletion
  echo "\n"
  git branch --merged | egrep -v "(^\*|master|main)" | xargs git branch -d
  echo "\ndone."
else
  echo "\nabort."
fi

参考

https://stackoverflow.com/questions/6127328/how-do-i-delete-all-git-branches-which-have-been-merged