Gitリポジトリに残ったごみコミットをローカル環境から掃除する方法まとめ
リモート側で消えたブランチをローカルから削除
$ git fetch origin --prune
または
$ git remote prune origin
リモート側で消えたタグをローカルから削除
$ git fetch origin --prune 'refs/tags/*:refs/tags/*'
fetch --pruneだと消えてくれないので、上記のようにrefspecを指定する。
gitのバージョンが古いとうまくいかない場合もある。
その場合は仕方ないので、一旦ローカルのtagを全て消してからリモートのtagを取得し直す。
$ git tag -l | xargs git tag -d
$ git fetch origin --tags
git gcで .git/
内から削除
- タグ削除やブランチ削除によりコミットがどこからも参照されなくなった場合、git gcを実行すればコミットオブジェクトが削除される。
$ git gc
- ただし、タグ/ブランチ以外に参照が残っている場合はgcされない。
- 例: reflog。残っていた場合はexpireしてからgcする。
$ git reflog expire --expire=now --all
$ git gc --aggressive --prune=now
チーム内へ周知
- tagなどは誰かのローカルリポジトリに残っていると、誤pushされ復活する可能性がある。
だいたいgit push origin --tagsのせい- 複数人開発の場合は周知して消してもらう。
- 面倒でなければ再度cloneしてもらうのもアリ。