目的
Gitのブランチはマージしても消えてくれないので定期的に掃除しないとゴミが残ってうざい。
というわけで、さくっと消す方法。
ローカルでマージ済みブランチの一覧を表示
git branch --merged
※消したいのは↑で出てきたブランチ一覧。
一括削除
git branch --merged|egrep -v '\*|develop|main'|xargs git branch -d
※develop と main は消さないようにしています。
※これでスッキリしますが、毎回これ書くのは辛い。
.gitconfig にalias (2021/05/18 ブランチ名の修正他)
.gitconfigに以下を追加
[alias]
delete-merged-branch = "!f () { git checkout $1; git branch --merged|egrep -v '\\*|develop|main'|xargs git branch -d; };f"
これで、 git delete-merged-branch develop とやると`
- developにcheckoutし、
- merge済みブランチを一括削除
します。
delete-merged-branch はaliasなので好きな名前をつければいいです。(自分は、 vacuum とつけています)
スクリプト内の、 develop|main 部分は消したくないブランチ名をパイプでつなげて複数記述すればマージ済みでも削除されません。
e.g.) release main ブランチをブロックしたい場合。
delete-merged-branch = "!f () { git checkout $1; git branch --merged|egrep -v '\*|release|main'|xargs git branch -d; };f"
また、引数にブランチ名を指定すれば複数の機能をまとめたFeatureブランチにチェックアウトしたあと、そのブランチにマージ済みのブランチを消すことができます。
e.g.) git delete-merged-branch hoge-features # hoge-featuresに checkout しマージ済みのブランチを削除
補足
リモートブランチを消しても、git branch -a で出てくるリモート追跡ブランチを消す方法
git fetch --prune
補足の補足(2021/05/18追記)
自分の .gitconfig の alias では git fetch --prune も組合わせています
[alias]
vacuum = "!f () { git checkout $1; git branch --merged|egrep -v '\\*|develop|main'|xargs git branch -d; git fetch --prune; };f"