いろんなブランチにチェックアウトしていると、いつの間にか不要なブランチが増えていきます。いらなくなったローカルブランチを削除する方法です。
やり方
まず、ローカルにあるマージ済のブランチ一覧を出力します。
git branch --merged
ここでは master や main、develep など、マスターブランチも含まれます。このブランチを削除する必要はないので、削除したくないブランチを除外します。
git branch --merged | egrep -v "(^\*|master|main)"
egrep
で渡された文字列から正規表現で行を抜き出すことができます。ここでは、main
と master
を除外した行を抜き出します。
すると、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