TL; DR
git fetch upstream
git branch --merged upstream/master | egrep -v '^\*' | perl -pe's//git branch -D/' | bash
upstream にマージされたブランチ一覧がこれで消えます。
前提とか
- GitHub に PR 出した
- 誰かがマージしてくれた。 (happy)
- リモートブランチを消した(Pattern A)、あるいは消し忘れた (Pattern B)
Pattern-A リモートブランチを消した場合 (よくあるパターン)
以下で一括削除できます
git fetch --prune
# リモートをフェッチして、リモートブランチがセットされているのに、そのブランチが削除されたブランチを消す
Pattern-B リモートブランチを消し忘れた場合
以下のコマンドで、upstream/master にマージ済みのブランチ一覧が取得できます
$ git branch --merged upstream/master
* master
hotfix_A
feature-X
BTS-1234
厳密には、upstream/master の祖先になっているブランチの一覧です。
あとはなんでもお好みのツールで。
git branch --merged upstream/master | # upstream/master マージ済みブランチ取得
egrep -v '^\*' | # 先頭が * で始まるのは、checkout 中のブランチなので省く
perl -pe's//git branch -D/' | # 各行の先頭に "git branch -D" 挿入
bash # bash の標準入力に入れてシェル実行する(-c でも、`` で括っても OK)
1行で再掲
$ git branch --merged upstream/master | egrep -v '^\*' | perl -pe's//git branch -D/' | bash