mainブランチ以外(checkoutしているブランチ以外)を一括削除する
mainブランチに移動してから削除コマンド実行します。
すると現在選択中のmain以外のブランチが削除されます。
$ git checkout main
$ git branch | xargs git branch -d
-d
の場合マージしていないブランチは消えません。
https://tracpath.com/docs/git-branch/
-d, --delete
ブランチを削除します。ブランチはアップストリームブランチで完全にマージする必要があります。アップストリームが—trackまたは--set-upstream-toで設定されていない場合、HEADでマージする必要があります。
$ git branch | xargs git branch -d
error: The branch 'hoge' is not fully merged.
If you are sure you want to delete it, run 'git branch -D hoge'.
-D
にすることで強制的に削除できます。
$ git branch | xargs git branch -D
削除したくないブランチを指定したい場合
mainブランチとfugaブランチ以外を削除します。
$ git branch | grep -v "main\|fuga" | xargs git branch -d
コマンド解説
git branch
でローカルにあるブランチが全て出力されます。
$ git branch
fuga
hoge
* main
grep
を使うことで検索することができます。
$ git branch | grep fuga
fuga
grep -v
は選択したもの以外を表します。
$ git branch | grep -v fuga
hoge
* main
複数選択したい場合は正規表現で表します。
$ git branch | grep -v "main\|fuga"
hoge
こちらの正規表現は簡易的なので例えばmain-01、やhogefugaとも一致してしまいます。
もしもmainとfugaのみに完全一致するように正規表現を表記するならば以下のようになります。
$ git branch | grep -v "^\( \|* \)\(main\|fuga\)$"
hoge
xargsコマンドで左のコマンドの結果を右のコマンドの引数に渡すことができます。
echo main
の結果はmain
となり、それを git checkout
コマンドの引数に渡すことで git checkout main
が実行されています。
$ echo main | xargs git checkout
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
よって以下のコマンドはgit branch
からgrep
を使って絞り込みをし、その結果をgit branch -d
の引数に渡すことで、ブランチの削除を実行しています。
$ git branch | grep -v "main\|fuga" | xargs git branch -d