由于已经删除的大文件,无法将代码推送到GitHub

487

目前我有

  1. 空的GitHub存储库
  2. SSH服务器存储库(主要)
  3. 本地存储库

SSH服务器存储库是最新的存储库(生产站点),所以我从那里克隆了一个Git到本地。然后我尝试对GitHub进行git push

一切都很顺利,但然后它说某个filename.gz对于GitHub来说太大了。我不需要这个文件,所以我运行了几个Git命令将其从Git缓存中删除,然后推回SSH服务器。

我在本地看不到这个大文件,但它仍然在SSH服务器上,即使git diff没有返回任何东西,并且git push返回“Everything is up-to-date” - 即使在我尝试推送到GitHub时该文件在本地存储库中不可见,我仍然会收到关于它的错误

remote:error:文件fpss.tar.gz为135.17 MB;这超出了GitHub 100 MB的文件大小限制

我按照GitHub帮助列表中的步骤解决了问题,这不应该足够吗?

当文件不在本地,并且未列在git status/diff/push中时,它仍然存在于以太网中吗?

3
文件仍然存在于历史记录中。你需要销毁历史记录,可能是通过压缩添加和删除该文件的提交来实现。 - Shahbaz
1
@Shahbaz 我按照此网站上列出的“解决问题”步骤操作了...这难道不够吗?https://help.github.com/articles/working-with-large-files - DevKev
1
如果你不在意你的历史记录,那么你可以这样做。但这并不好。你可以创建一个专门用于 Github 的分支,将所有历史记录压缩成一个提交(实际上与你所说的相同,但不会删除其他分支),然后只将该特定分支推送到 Github。稍后,当例如 master 分支中有提交时,你可以挑选所有提交并应用到 Github 分支。(不确定合并是否可行,但如果可以,那就更好了) - Shahbaz
1
全心全意地操你妈,Github。 - Tobias Wilfert
1
我对Github真是心有余悸。 - undefined
显示剩余10条评论
28个回答

2
我认为这是因为您删除的文件可能已经存在于您的提交中,首先要检查此问题,请使用:
git log

这将返回当前分支中您的提交列表,查找确切提交所需的ID,
然后使用,
git show <commit_id>

这应该显示包含在提交中的文件的详细信息。

现在要修复您的问题,请使用:

git reset --soft HEAD~1

这里的1代表前一个提交,您可以根据需要使用不同的数字。如果您需要倒数第二个提交,请使用git reset --soft HEAD~2

这将重置您的Head到以前的提交,如果此提交没有大文件,则可以执行以下操作:

git add .

git commit -m <message_for_commit>

git push origin <repo_name>

否则

如果你想要重置到一个不包含你的文件的特定提交,只需使用以下命令:

git reset --soft <commit_id>

然后在此处创建一个新的提交,不包含已删除的文件,并将其推送


1

如果您正在上传自己的项目,只需进入包含目录的文件夹。 删除大文件。 然后单击“视图”(窗口文件) 查看->检查隐藏文件夹 然后您将能够看到“.git”文件 删除.git文件 这将删除所有提交历史记录 然后您可以像新的一样推送您的存储库...


1

不知何故这对我有效。我尝试了所有解决方案,但是这个命令节省了我的时间。希望这也能帮到你。


git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch <file/folder path>' --prune-empty --tag-name-filter cat -- --all

请自行承担风险运行此命令。我不会对您的行为负责。

从根目录运行此命令。


请解释解决方案 - raquelhortab

1
对我来说,修复很简单,只需创建一个新文件夹,克隆存储库,将最后一次提交的新文件添加进去,然后推送即可。

我会添加细节:在存储库目录中...
  1. 运行 git log 命令以显示最后一次推送以来的提交记录,然后复制这些提交记录。
  2. 删除(仅).git文件夹(rm -rf)。
然后...
  1. 在临时目录中从GitHub克隆存储库。
  2. 将新克隆的.git文件夹从临时目录移动到存储库目录中。
  3. 进行一次提交。(我包括了上面复制的提交记录的提交消息,以及提交消息不连续的解释。)
  4. 推送。
证毕
- undefined

1

我的非正统但简单的解决方案:

  • 忘掉你最近有问题的本地Git仓库,git clone你的仓库到一个全新的目录。
  • git remote add upstream <你的GitHub仓库地址>
  • git pull upstream master
  • 此时,只需将你的新文件复制到提交、从旧的本地仓库中复制到你的新本地仓库,可能包括你现在缩小了的巨大文件。
  • git add .
  • git commit -m "你的提交信息"
  • git push origin master

哇!在我的情况下像魔法一样奏效。


1

重新初始化存储库对我有用:

  1. rm -rf .git
  2. git init
  3. git remote add origin https://github.com/{user}/{repo}
  4. git commit -am 'fix: reinit repo'
  5. git push -u origin {branch} --force

1
小心!虽然这样做可以实现目标,但您将失去项目的完整提交历史记录,这可能不是您想要的。 - ChrisB

0

这对我有用。来自Github的文档 压缩Git提交 git reset origin/master

git checkout master && git pull;
git merge feature_branch;
git add . --all;
git commit -m "your commit message"

在这里找到文档 链接


0

对我有效的方法:

  1. 将我的GitHub项目文件夹重命名为其他名称
  2. 使用正确的文件夹名称重新克隆存储库
  3. 在我重命名的存储库中删除.git文件夹(可能需要在Windows中打开允许查看隐藏文件)
  4. .git文件夹从正确的文件夹名称移动到重命名的文件夹中
  5. 删除重新克隆的存储库文件夹,将原始存储库文件夹重命名为正确的名称
  6. 提交您的更改(不包括大型文件)并推送

0

我在iOS项目中没有gitignore文件时遇到了这个问题。

我认为可能是因为它试图将一个巨大的文件推送到github,而github可能会拒绝那个巨大的文件或(文件)。


0

与其做复杂的事情,不如将您的存储库(在您的计算机上)复制到另一个位置。删除大文件。进行几次推送和拉取。然后,一些文件会出现问题,例如“<<<<<< HEAD”。只需将备份复制到磁盘上的旧文件夹中。再进行添加、提交、推送!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接