Closed4
【git】特定のブランチ以外を全て削除するコマンド
main以外のブランチを一括削除
ただしカレントブランチは削除対象から外す
# 削除されるブランチ一覧を表示
git branch | grep -v "main\|*"
# 削除を実行
git branch | grep -v "main\|*" | xargs -r git branch -D
仕組み
-
git branch
でブランチ名の一覧を取得 - 1の結果を
grep -v 正規表現
で特定の表現を除いたものに絞る - 2の結果をxargsにより引数として渡して
git branch -D
で削除
mainとdevelop以外のブランチを一括削除
ただしカレントブランチは削除対象から外す
# 削除されるブランチ一覧を表示
git branch | grep -v "main\|develop\|*"
# 削除を実行
git branch | grep -v "main\|develop\|*" | xargs -r git branch -D
feat-
から始まるブランチを一括削除
feat-a
とfeat-b
とfeat-c
を削除したいようなとき
# 削除されるブランチ一覧を表示
git branch --list "feat-*"
# 削除を実行
git branch --list "feat-*" | xargs -r git branch -D
ほぼ同じ解説を見つけてしまった。アーカイブしようと思ったけどまぁいいや、残しておこう
grepのやつカレントがmainかdevelop以外にいたら
git branch -D *
が発行されるのが気になりますね。。。
*も除外した方が良い気がします
私がやるならこうかな
$ git branch
aaaaa
bbbbb
ccccc
* ddddd
eeeee
master
$ git branch | awk '!/*|master|aaaa/{system("git branch -D "$1"")}'
Deleted branch bbbbb (was 5faae1e).
Deleted branch ccccc (was eacedb7).
Deleted branch eeeee (was bdb0ec5).
$ git branch
aaaaa
* ddddd
master
コメントありがとうございます。カレントブランチを削除しようとするとエラーが発生して削除はされないようですが、明示的に除外した方が良さそうですね。上のコマンドも修正しておきました。
このスクラップは2021/12/08にクローズされました