git - 删除卡在 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
解决方案
你可以尝试做一个“交互式变基”。“变基”通常意味着将一组提交移动到不同的基本提交上,但在这种情况下,我们会将提交变基到树中它们所在的相同位置,仅使用命令的“交互式”功能。
假设添加大文件的提交的提交 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 ... ]
在第一行,更改pick
为edit
,然后保存并退出。 git rebase
现在将进入该提交已暂存但尚未提交的状态,您可以修改该提交:
git rm --cached my-large-file.tiff my-other-large-file.tiff
然后键入git rebase --continue
。它将创建一个新的提交,具有与旧提交相同的提交消息和相同的内容,除了没有大文件。然后,它将在新创建的提交之上重新调整所有以下提交。
完成所有这些后,您将拥有一个没有任何大文件痕迹的新分支,可以合并到master
.
推荐阅读
- excel - 运行时错误 440 属性是只读的 - 在一个宏上
- ios - 单击按钮后将名称附加到数组,然后将其发送到另一个视图控制器
- python - 将python文件转换为ui文件错误
- django - 如果我通过 git 部署了 Django 应用程序,如何创建超级用户?
- node.js - 在节点 js 中使用 puppeteer 时无法单击网页中的按钮
- database - 我可以将 FaunaDB 用于离线优先应用程序吗?
- reactjs - 我如何更改本机反应中的堆栈标题?
- sass - 我可以在从 node_modules 中的 antd 导入样式后强制加载全局样式吗?
- ffmpeg - 使用 ffmpeg 将透明 webm 文件与 jpg/png 合并/混合/复合
- wordpress - 仅通过 HTTPS 安装官方 WordPress docker