LoginSignup
23
15

More than 5 years have passed since last update.

リモートから削除されたブランチ/タグ/コミットをローカルからも削除する

Posted at

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してもらうのもアリ。

参考

23
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
15