我的一名团队成员在git服务器上意外地提交并推送了如此大的文件( 5 Gbyte )。这是一次提交。
并且其他所有团队成员都无法获得git更新,因为它太慢了。(可能需要5到6个小时或更长时间)。所以我认为我们无法删除本地计算机上的提交,因为我们还无法更新提交。 (git revert,git reset等)不幸的是,她下班了,所以我们无法访问她的本地机器。
但是,我们可以使用shell访问git repo服务器。
project3.git
和文件夹。
HEAD config description hooks info objects packed-refs refs
因此,如果可能,我们希望直接在服务器上使用shell命令恢复或删除提交或文件。然后我们的团队成员不需要获得更新。
有没有办法做到这一点?
更新:我们知道提交名称。 ex)33aedaf55e
答案 0 :(得分:3)
注意:在您执行任何操作之前,您应备份远程存储库的副本!
如果要重置远程仓库中的分支:
在远程仓库中,显示最近的历史记录:git log -3
* 33aedaf - (HEAD, master) commit with big file
* f18fd52 - some other commit
* 160c78f - another commit
将分支引用(假设为master)设置为上一次提交:git update-ref refs/heads/master f18fd52
在此之后,在主分支上执行git fetch
将不会获取大文件。我们所做的与git reset --hard f18fd52
类似。
大文件仍然存储在远程仓库中。您可以列出无法访问的对象:git fsck --unreachable
并删除所有无法访问的对象:git gc --prune=all
。请注意,这将删除alll无法访问的对象,因此请确保分支指针首先看起来没问题。
请注意,我们所做的主要是重写历史记录。如果有人已经使用巨大的文件撤销了提交并开始处理它,那么当他试图推送他的提交时可能会出现新的问题,所以你应该通知所有与repo一起工作的同事关于你做了什么。