我刚刚开始玩Git并且想知道一个具体的案例:
我错误地做了很多提交,更糟糕的是我把它推到了远程服务器上。
现在,我正在尝试使用git reset --hard v1.0
和git push -f origin master
让事情恢复原状。
这样做之后看起来没问题,但是当我查看repo文件大小时,它仍然和我的错误提交一样大。即使我尝试 git gc 进行垃圾收集,我也没有成功。在这种情况下,如果我想故意进行破坏性的改变,我该怎么办?
任何提示都表示赞赏!
答案 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)
我重复了我在开始时说的步骤,制作了一个新的回购克隆,现在它很好。谢谢你们!