Gitで使われていないリモートブランチの整理

  • 131
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

使われていなさそうな名前のリモートブランチがいろいろあったので、何か一覧するコマンドがないか探してみた。

マージ済みリモートブランチ一覧

既に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