3 回答

TA貢獻(xiàn)1995條經(jīng)驗(yàn) 獲得超2個贊
沒有輸出,沒有懸空(對吧?)
請注意,從您的reflog引用的提交被認(rèn)為是可訪問的。
這個提交的狀態(tài)究竟是什么?如何列出具有類似狀態(tài)的所有提交
通過--no-reflogs
說服git fsck
向他們展示。
如何刪除那些提交?
一旦您的reflog條目過期,那么這些對象也將被清除git gc
。
到期由調(diào)控gc.pruneexpire
,gc.reflogexpire
和gc.reflogexpireunreachable
設(shè)置。參看 git help config
。
默認(rèn)值都很合理。

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超5個贊
要刪除所有懸空提交以及可從reflog中訪問的提交,請執(zhí)行以下操作:
git reflog expire --expire-unreachable=now --allgit gc --prune=now
但請確保這是你想要的。我建議你閱讀手冊頁,但這里是要點(diǎn):
git gc
刪除無法訪問的對象(提交,樹,blob(文件))。如果某個對象不屬于某個分支的歷史記錄,則該對象無法訪問。實(shí)際上它有點(diǎn)復(fù)雜:
git gc
做其他一些事情,但它們在這里并不重要,也沒有危險。
不會刪除小于兩周的無法訪問的對象,因此我們使用的--prune=now
方法是“刪除之前創(chuàng)建的無法訪問的對象”。
也可以通過reflog訪問對象。雖然分支記錄了某個項(xiàng)目的歷史記錄,但是reflog記錄了這些分支的歷史記錄。如果你修改,重置等提交將從分支歷史記錄中刪除,但是如果你意識到你犯了錯誤,git會保留它們。Reflogs是一種方便的方法,可以找出在分支(或HEAD)上執(zhí)行的破壞性(和其他)操作,從而更容易撤消破壞性操作。
因此,我們還必須刪除reflog以實(shí)際刪除從分支無法訪問的所有內(nèi)容。我們通過使--all
reflogs 到期來實(shí)現(xiàn)這一目標(biāo)。git再次保留了一些reflog以保護(hù)用戶,所以我們再次告訴它不要這樣做:--expire-unreachable=now
。
由于我主要使用reflog來從破壞性操作中恢復(fù),我通常會使用--expire=now
它來完全消除reflog。

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超10個贊
我有同樣的問題,仍然遵循這個線程中的所有建議:
git reflog expire --expire-unreachable=now --all
git gc --prune=now
git fsck --unreachable --no-reflogs # no output
git branch -a --contains <commit> # no output
git show <commit> # still shows up
如果它不是reflog而不是分支,...它必須是一個標(biāo)簽!
git tag # showed several old tags created before the cleanup
我刪除了標(biāo)簽git tag -d <tagname>并重新進(jìn)行了清理,舊的提交已經(jīng)消失。
- 3 回答
- 0 關(guān)注
- 1221 瀏覽
添加回答
舉報