在git repo server

时间:2016-04-18 11:30:43

标签: git

我的一名团队成员在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

1 个答案:

答案 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一起工作的同事关于你做了什么。