重置后,Git repo不会收集垃圾 - 硬盘

时间:2013-01-10 20:22:44

标签: git bitbucket

我刚刚开始玩Git并且想知道一个具体的案例:

我错误地做了很多提交,更糟糕的是我把它推到了远程服务器上。

现在,我正在尝试使用git reset --hard v1.0git push -f origin master让事情恢复原状。

这样做之后看起来没问题,但是当我查看repo文件大小时,它仍然和我的错误提交一样大。即使我尝试 git gc 进行垃圾收集,我也没有成功。在这种情况下,如果我想故意进行破坏性的改变,我该怎么办?

任何提示都表示赞赏!

4 个答案:

答案 0 :(得分:2)

您可能已经更改了历史记录,但是您尚未清除的是reflog。

如果输入:

git reflog

你会看到你的#34;大承诺"还在那里。默认情况下,如果无法访问,所有条目将保留30天,如果可以访问,则保留90天(通过历史记录)。

例如,您可以尝试使用git reflog --expire-unreachable=1.minute

答案 1 :(得分:1)

您必须使您重绕的分支的reflog和HEAD reflog失效,然后gc可以收集现在无法访问的提交:

git reflog expire --expire=now HEAD <branches which contained said commit>
git gc

reflog是Git的安全机制,可以跟踪以前的分支状态,因此在发出错误的git reset命令或运行伪造的rebase时,你不会立即丢失数据,无论如何。

答案 2 :(得分:0)

最简单的解决方案是再次克隆存储库。但是,如果您的存储库很大,则可能需要很长时间。要删除文件而不再克隆项目,您可以等待一段时间git自动删除文件或使用以下命令强制它:

git reflog expire --all --expire-unreachable=0
git repack -A -d
git prune

答案 3 :(得分:0)

我重复了我在开始时说的步骤,制作了一个新的回购克隆,现在它很好。谢谢你们!