Posted at

git で指定したブランチ以外を削除する(大量のローカルブランチを特定の物以外削除)

More than 1 year has passed since last update.

git branch | rg -v 'master'| rg -v 'remotes'| xargs git branch -D

なんでこんなんが必要になったかというと、改めて git branch -a とかやったらローカルに大量のブランチがあって、しかもマージが終わってたりするせいで多分二度と使わぬやつが大量だったので綺麗にしたくなった次第です。

RipGrep必須。

rg -v 'hogehoge'

オプションの「-v」がinvert match。excludeと同じ意味。除外する。hogehoge以外。

上記だとmasterとremotesに一致したブランチ以外git branch -Dしましょうというコマンド。

RipGrepはrg -v 'hogehoge'としたときに

hogehogeはもちろん、hogehogehogeやaaaahogehoge、hogehogexxxなども除外対象、つまり部分一致でやってくれます。

重要なのは殺しすぎないということ。大体8割〜9割ぐらい削除できるぜコマンドになるのでうっかり事故は減ります(削除コマンドほど大は小を兼ねると大変な事故になるんで、できるだけ殺さないのが良いですね)。

最後に xargs で実行するだけ。

RipGrepのオプション次第で反転ももちろん可能です。

git branch | rg -v 'staging' | rg -v 'master' | rg -v 'remotes'| xargs git branch -D

実際に使ったコマンドはこっちです。

僕らはstagingブランチで作業したりここをベースに別ブランチを切ってます。masterをリリースブランチとして運用していますのでstagingってついているものも残したかったという形。