Closed4

【git】特定のブランチ以外を全て削除するコマンド

catnosecatnose

main以外のブランチを一括削除

ただしカレントブランチは削除対象から外す

# 削除されるブランチ一覧を表示
git branch | grep -v "main\|*"

# 削除を実行
git branch | grep -v "main\|*" | xargs -r git branch -D
仕組み
  1. git branchでブランチ名の一覧を取得
  2. 1の結果をgrep -v 正規表現で特定の表現を除いたものに絞る
  3. 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-afeat-bfeat-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
catnosecatnose

コメントありがとうございます。カレントブランチを削除しようとするとエラーが発生して削除はされないようですが、明示的に除外した方が良さそうですね。上のコマンドも修正しておきました。

このスクラップは2021/12/08にクローズされました