如何删除缺少目录的git commit

时间:2014-08-15 22:48:30

标签: git

我意外地将一个大文件检查到磁盘空间紧张的机器上的仓库中。我们的系统管理员看到了这个并删除了.git目录

rm -rf .git/objects/51/ecbb7eb634f878f8460c55cae815c7515265bb

我现在在推送时遇到致命错误

$ git push origin master
Counting objects: 63, done.
error: unable to find 51ecbb7eb634f878f8460c55cae815c7515265bb
Delta compression using up to 32 threads.
Compressing objects: 100% (43/43), done.
fatal: unable to read 51ecbb7eb634f878f8460c55cae815c7515265bb
error: pack-objects died with strange error
error: failed to push some refs to 'git@github.com:repo_name.git'

如何删除51ecbb7eb634f878f8460c55cae815c7515265bb提交

我提交后还有未合并的提交,我不能丢失

1 个答案:

答案 0 :(得分:1)

您可以尝试

  • 在本地删除此提交(git rebase -i <commit_sha1>^并删除相应的行;其中<sha1>是引入大对象的提交的sha1)
  • 完全删除远程仓库,然后从当地仓库再次克隆(使用例如ssh)

当然,在执行此类操作之前,您可能需要进行一些备份。

编辑:在最后一步中,你不应该推送到远程仓库(因为我们删除了它,它是不可能的)。相反,你应该克隆你的本地回购。即:连接到远程服务器,例如使用ssh,然后克隆你在本地工作站上的理智回购。