首页 > 解决方案 > 删除卡在 Git Push 的大文件

问题描述

我有一个独特的情况,我添加了 2 个 >50MB 的文件,而 Git 无法处理它们。我已经提交了它们并试图推动,但它出错并说它太大了。没关系,现在我可以解决了,但现在我在添加了我想保留的那些文件之后进行了更改。所以现在我有 8 个提交准备推送,一旦我可以摆脱大文件并让它再次工作。

我用过git rm --cached largefile.whatever,看不到里面的大文件,git diff --stat --cached origin/master但是当我推它时,它仍然推了 20 分钟,然后说文件太大了。

我还删除了大文件并推送了删除但仍然是同样的问题。

我想保留我最近的所有工作,但删除大文件并继续前进。我怎样才能做到这一点?

这是我的提交过程。我希望回到 1 也一样容易,但我现在把自己挖到了一个洞里。我不是 git 最好的,所以我希望这是有道理的。

我不能git rm,因为该文件已被删除。它没有显示在目录中并说myfile.tif did not match any files

Git 日志

标签: gitpush

解决方案


你可以尝试做一个“交互式变基”。“变基”通常意味着将一组提交移动到不同的基本提交上,但在这种情况下,我们会将提交变基到树中它们所在的相同位置,仅使用命令的“交互式”功能。

假设添加大文件的提交的提交 id 是abc123. 然后你会运行:

git rebase --interactive abc123^

(注意尾随插入符号:我们正在重新定位到该提交的父级)

这会将您放入包含如下内容的文本编辑器中:

pick abc123 New garage, touch ups to lava 3
pick def456 ADded garage play, removed giant Tif file
[ ... and so on ... ]

在第一行,更改pickedit,然后保存并退出。 git rebase现在将进入该提交已暂存但尚未提交的状态,您可以修改该提交:

git rm --cached my-large-file.tiff my-other-large-file.tiff

然后键入git rebase --continue。它将创建一个新的提交,具有与旧提交相同的提交消息和相同的内容,除了没有大文件。然后,它将在新创建的提交之上重新调整所有以下提交。

完成所有这些后,您将拥有一个没有任何大文件痕迹的新分支,可以合并到master.


推荐阅读