2012-12-11 12 views
5

からコミット参照されていないを削除します。私はgitのはこのような歴史を持っているコミットgitリポジトリ

  U 
     /
A---B---C---D---E master 

を何もコミットUを指していないが、私はそのハッシュを知っています。このコミットをリポジトリから完全に削除するにはどうすればよいでしょうか?私はこのレポを使用している唯一の人です。

私はgit rebaseを使用しようとしましたが、ブランチの一部を削除したり、コミットを移動することはできますが、1回のコミットを削除することはできません。

私がgit checkout <hash>を実行し、次にgit reset --hard HEAD~1を実行した場合、コミットがもう表示されません。それは実際に完全に行ったのですか、それともまだレポに隠れていますか?

答えて

2

最終的にはgitでクリーンアップされますが、実際にはガベージコレクションを強制するにはgit gcを調べることができます。

cleanのコマンドは異なりますので、この点についてはご注意ください。

+0

リポジトリ全体をクローンするとどうなりますか?参照されていないガベージオブジェクトも同様にクローンされますか? – Jawap

+0

@ Jawap:いいえ、クローンされません – Chronial

4

としては、単純に

git reflog expire --expire-unreachable=now --all 
git gc --prune=now 

git reflog expire --expire-unreachable=now --allを使用すると、reflogに到達できないコミットのすべての参照を削除し、hereを説明しました。

git gc --prune=nowは、コミット自体を削除します。

注意git gc --prune=nowを使用しているのは、それらのコミットがまだreflogで参照されているため動作しません。したがって、reflogをクリアすることは必須です。

関連する問題