从 git repo 中删除文件

从 git repo 中删除文件

我犯了一个大错误。

我创建了一个包含一些文件的仓库。我做了一些提交,一切都正常。但后来我意识到,2 个文件有一个非常非常大的错误,导致它们的大小约为 200 Mb,而它们应该是 2 Mb 左右(不是开玩笑)。它们位于根提交中。我设法用正确的文件修改了根提交,但我的仓库仍然大约有 500 Mb,这使得管理起来非常困难。如果我重置为根提交,这些文件就是正确的文件。

由于这个原因,我还没有推送到中央仓库。上传 500 MB 需要很长时间。

所以,我想知道如何从 repo 中删除这 200Mb 文件,即使它们不再存在于任何提交中。我应该使用哪些命令?我应该直接删除最大的 blob 文件吗?我疯了吗?我是不是犯了什么非常非常严重的错误?

谢谢。我真的很着急。

[更新]

我已经运行了 git gc,但它只减少了大约 40 Mb。我认为那些讨厌的文件仍然存在,所以我不知道该怎么办。

答案1

缩小本地仓库的最简单方法(不需要推送,正如 Micheal Anderson 正确指出的那样)是转到其他目录并运行git clone /path/to/your/repo。 这个新的仓库现在应该很小了 - 继续在那里工作。

答案2

要从 repo 历史记录中删除文件,您可以使用git filter-branch。然而,这只会从所有树中删除文件,文件内容可能仍以 blob 形式存在于 git 对象缓存中。您可以使用以下命令清除它们git gc

但是,您不必担心那些未附加的 blob 会被推送到主存储库,因为只有附加到您正在推送的提交树的 blob 才会被发送到其他服务器。

如果你已经推送了大文件,那么清理远程仓库中未附加的 blob 会比较棘手。请参阅https://stackoverflow.com/questions/3162786/how-to-do-git-gc-on-git-remote-repository

相关内容