使われていなさそうな名前のリモートブランチがいろいろあったので、何か一覧するコマンドがないか探してみた。
マージ済みリモートブランチ一覧
既にmaster
にマージしたリモートブランチなら何時でもコミットから分岐できるから削除できる。マージ済みブランチは以下のコマンドで列挙できた。
git branch -r --list --merged
デフォルトではカレントブランチのHEADと比較されるのでローカルでmaster
ブランチに切り替えて実行するか
git branch -r --list --merged <commit>
でコミットを指定する。
逆にgit branch -r --list --no-merged
だとマージされていない(進捗中 or 放置)ブランチが検索できる。
削除を依頼するためブランチの最後のコミッタとコメント、日付を表示したい。--pretty=format
を使うことにした。書式のオプションはgit-logのPRETTY FORMATSのところに書いてある。
git log -1 --pretty=format:"%an %ad %s" --date=short
最終的に以下のようなコマンドを使った。リストしたブランチに対してgit log
を実行する。
git branch -r --list --merged | grep -v '*' | xargs -Ibranch git log -1 --pretty=format:"|branch|%an|%ad|%s|" --date=short branch
フォーマットを|branch|%an|%ad|%s|
にしているのはWiki/Markdownでテーブルにするため。
あとはこれを送ってラストコミッタさん、要らないブランチなら削除してとお願いする。Jenkinsとかで定期的にメールするようにしてもいいかもしれない。
--no-merged
でも日付が古い不明なブランチは企画倒れで使われていない恐れがあるので確認してもらったほうが良い。
git branch -r --list --no-merged | grep -v '*' | xargs -Ibranch git log -1 --pretty=format:"|branch|%an|%ad|%s|" --date=short branch
リモートブランチの削除
ちなみにリモートブランチの削除はローカルで削除して空をpushすればよい。
git branch -d <branchname>
git push origin :<branchname>
ローカルブランチとリモートブランチが同名の場合、
git push origin <branchname>
は
git push origin <branchname>:<branchname>
の省略であり、
空のブランチのpushは
git push origin :<branchname>
になる。
タグを削除するときも際も同じ方法が使える。
削除されたリモートブランチの同期
誰かがリモートブランチが削除しても、自分のローカルブランチには残っている。以下のコマンドで整理ができる。
git remote prune origin