2012-12-11 481 views
5

不再被引用的承諾我有一個混帳提交歷史是這樣的:取下git倉庫

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

沒有點到提交U,但我知道它的哈希值。我如何從存儲庫中完全刪除這個提交,就好像它從來沒有存在過?我是唯一使用此回購的人。

我試着用git rebase,但可以刪除一個分支或移動提交的部分,但似乎並沒有能夠刪除單個提交。

如果我做git checkout <hash>然後git reset --hard HEAD~1我沒有看到提交了。它實際上完全消失還是仍然隱藏在回購中?

回答

2

它最終會被混帳被清理,但你可以看看git gc實際強制垃圾收集。

clean命令是不同的,將不會照顧你。

+0

如果我克隆了整個回購?未引用的垃圾對象是否也會被克隆? – Jawap

+0

@Jawap:不,他們不會被克隆 – Chronial

4

如上所述here,只需使用

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

git reflog expire --expire-unreachable=now --all消除在reflog可達提交的所有引用。

git gc --prune=now刪除提交本身。

注意:只有使用git gc --prune=now將不起作用,因爲這些提交仍在引用日誌中引用。因此,清除reflog是強制性的。