我刚开始玩 Git,想知道一个具体案例:
我错误地进行了重提交,更糟糕的是,我将其推送到了远程服务器。
现在我试图让事情恢复到原来的样子,使用git reset --hard v1.0
and git push -f origin master
.
这样做之后看起来还不错,但是当我查看 repo 文件大小时,它仍然和我的错误提交一样大。即使我尝试git gc进行垃圾收集,我也没有成功。在这种情况下,如果我想故意进行破坏性更改,我应该怎么做?
任何提示表示赞赏!
您可能已经更改了历史记录,但是您尚未清除的是 reflog。
如果您键入:
git reflog
你会看到你的“大提交”仍然存在。默认情况下,如果无法访问所有条目,则保留 30 天,如果可访问,则保留 90 天(通过历史记录)。
例如,您可以尝试使用git reflog --expire-unreachable=1.minute
。
您必须使您回绕的分支的 reflog 和 HEAD reflog 过期,然后 gc 可以收集现在无法访问的提交:
git reflog expire --expire=now HEAD <branches which contained said commit>
git gc
reflog 是 Git 的安全机制,它跟踪以前的分支状态,因此在发出不正确的 git reset 命令或运行虚假的 rebase 时,您不会立即丢失数据,无论多么时髦。
我重复了我在开始时说的步骤,制作了一个新的 repo 克隆,现在很好。感谢你们!
最简单的解决方案是再次克隆存储库。但是,如果您的存储库很大,则可能需要很长时间。要删除文件而不再次克隆项目,您可以等待一段时间让 git 自动删除文件或使用以下命令强制删除:
git reflog expire --all --expire-unreachable=0
git repack -A -d
git prune