🔥

使わなくなった古いリモートブランチは削除してしまおう

に公開

はじめに

Gitでは作業ごとにブランチを切るのが一般的です。
作業の進捗を記録しておくために、途中でもgit pushしておくことも多いと思います。

しかし、作業の中断や方針変更があった場合、あるいはPull RequestがマージされずにCloseされた場合など、リモート上に古いブランチがそのまま残ってしまうことがよくあります。

私の配属されているプロジェクトでは、リモートブランチが大量に残っていて混乱していたため、「一定期間更新のないブランチをまとめて削除するスクリプト」を作りました。

130 Branches !?

https://gist.github.com/rie03p/211b5cdb9984cc4b1f659438df00441f

git for-each-ref

https://git-scm.com/docs/git-for-each-ref

git for-each-refブランチのリファレンス情報を取得できるコマンドです。
以下のように実行すると、各ブランチの最新コミットハッシュが表示されます。

git for-each-ref
ecfe8ce8a9bf9c77f877c69023947eecfb0d3da3 commit	refs/heads/hoge
74cf3ca49bac9372459c5febc23425df0e33fdd9 commit	refs/heads/fuga
1a0f39170ff52c4560531b7084d13a6da302343d commit	refs/heads/piyo

今回のスクリプトでは以下のように使っています:

git for-each-ref --format='%(refname:short)|%(committerdate:iso8601)' refs/remotes/origin
  • --format -> 出力形式を指定
  • %(refname:short) -> ブランチ名
  • %(committerdate:iso8601) -> 最終コミット日時(ISO8601形式)
  • refs/remotes/origin -> リモートブランチ一覧を対象にする

これにより、すべてのリモートブランチとその最終更新日時を一括で取得できます。

使い方

# 31日以上更新されていないリモートブランチを確認
./delete-old-remote-branches.sh

# 60日以上
./delete-old-remote-branches.sh 60

まとめ

プロジェクトのリモートブランチがスッキリしました。
皆さんリモートブランチが増えないよう何か工夫はされていますか?

Discussion