削除されたリモートブランチを upstream にしているローカルブランチを削除したい

そういう便利機能がありそうでなかったので自分でやるしかなかった。

git fetch --prune

git branch --format='%(refname:short) %(upstream:track)' | grep '\[gone\]' | awk '{print $1}' | xargs -r git branch -d

解説

git fetch --prune

リポジトリを同期する。

削除されたリモートブランチの remote refs も削除する。

git branch --format='%(refname:short) %(upstream:track)'

ローカルブランチ名に upstream の状況を表示する。

リモートブランチの状況 表示
リモートブランチが進んでいるとき <name> [behind <number>]
ローカルブランチが進んでいるとき <name> [ahead <number>]
リモートブランチが削除されているとき <name> [gone]

grep '\[gone\]'

リモートブランチが削除されたブランチ名だけを残す。

awk '{print $1}'

ブランチ名だけを残す。

xargs -r git branch -d

残っているブランチ名を指定して削除している。

面倒なときは git branch -D として強制的に削除すればいい。

参考