結論
git branch --list --format='%(refname:short)' | \
xargs -I{} -- git -c advice.forceDeleteBranch=false branch -d '{}'
何をしているか
git branch --list --format='%(refname:short)'
git branch --list
はローカルに存在するブランチを全列挙します。しかし、それだと現在のブランチを意味するインジケーターが行の先頭について邪魔なので--format='%(refname:short)'
で抑制します。
xargs -I{} --
...
-I {}
は後続のコマンドに出現する{}
をパイプされてきた文字列で置換します。これは Git のブランチ名によるコマンドインジェクション を防ぐために重要です。単純にspreadしてしまうと、途中でセミコロンを挟むことによりコマンドが終了してしまいます。
git -c advice.forceDeleteBranch=false branch -d
-c advice.forceDeleteBranch=false
はエラーメッセージを減らすための呪文です:
hint: If you are sure you want to delete it, run 'git branch -D integrate'
hint: Disable this message with "git config advice.forceDeleteBranch false"
それを無視すれば、単純にgit branch -d
で、マージされているブランチならば消すという働きをします。