簡體   English   中英

git checkout commit_id在git gc之后仍然有效

[英]`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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM