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

时间:2018-08-22 14:41:59

标签: git github version-control branch

我有一个提交,应该在挂接到它的分支的基础上执行后保留悬空/无法访问的提交,并且该提交在该过程中被压缩。 xAxis: { visible: false },

现在,如果我做git rebase -i <other commit id>,我什么也没得到。

然后我做一个git branch --contains ID。现在,我假定,它应该有效删除悬空的提交,因此不再需要对其进行引用,但是git gc --prune=now --aggressive仍然有效。

对我在这里做错的任何想法吗?我也做了git checkout ID,因为我担心结帐实际上是与原点一起使用的,但是结果是相同的。 预先感谢

1 个答案:

答案 0 :(得分:0)

使用以下命令为您的提交生成符号引用(如果可能)。

git name-rev <hash>

偶然发现类似的情况,当tag仍然引用悬空提交时。此命令返回标签和我的提交~1的相对位置。

如果此命令没有返回有用的结果,则也可以从reflog中引用它。在运行垃圾回收之前,您是否尝试过使无法到达的提交过期?

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

编辑: 我对此感到有些困惑,即使最后一个命令也无法强制垃圾回收来接收您的提交。您的存储库大小是多少?既然您在第一个垃圾收集器上使用了--aggressive标志,那么当您尝试第二个垃圾收集器时,第一个gc进程是否仍在进行中?您可以结合使用git gc --force和其他参数来立即运行gc,即使正在运行另一个垃圾回收。

  

-强制

     

即使此存储库上可能正在运行另一个git gc实例,也要强制运行git gc。