[英]`git checkout commit_id` still works after `git gc`
我有一個提交,應該在掛接到它的分支的基礎上執行后應該懸空/無法訪問,並且在該過程中壓縮了提交。 git rebase -i <other commit id>
現在,如果我做git branch --contains ID
我什么也沒得到。
所以然后我做一個git gc --prune=now --aggressive
。 現在,我認為這應該有效刪除懸空的提交,因此不再需要對其進行引用,但是git checkout ID
仍然有效。
對我在這里做錯的任何想法嗎? 我還做了一個git remote remove origin
因為我擔心結帳實際上是在使用Origin,但是結果是一樣的。 提前致謝
如果可能的話,使用以下命令為您的提交生成符號引用。
git name-rev <hash>
偶然發現類似的情況,即tag
仍引用懸空的提交。 該命令返回標簽和我的~1
的相對位置。
如果此命令沒有返回有用的結果,則也可以從reflog中引用它。 在運行垃圾回收之前,您是否嘗試過使無法到達的提交過期?
git reflog expire --expire-unreachable=now --all
編輯:我對這個事實有點困惑,即使最后一個命令也無法強制垃圾回收來接收您的提交。 您的存儲庫大小是多少? 既然您在第一個垃圾收集器上使用了--aggressive
標志,那么當您嘗試第二個垃圾收集器時,第一個gc進程是否仍在進行中? 您可以結合使用git gc --force
和其他參數來立即運行gc,即使正在運行另一個垃圾回收。
- 力
即使此存儲庫上可能正在運行另一個git gc實例,也要強制git gc運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.