目前我有

空的GitHub回购 SSH服务器恢复(main) 当地的回购

SSH服务器回购是最新的回购(生产站点),所以我从那里克隆了一个Git到本地。然后我尝试做一个git推送到GitHub。

一切都很好,但随后它说一些关于文件名。gz对GitHub太大。我不需要这个文件,所以我运行了几个Git命令从Git缓存中删除它,然后推回到SSH服务器。

我没有看到本地的大文件,但它仍然在SSH服务器上,即使git diff返回什么,git推送返回“一切都是最新的”-即使文件在本地回购中不可见,当我尝试推送到GitHub时,我仍然会得到错误

文件fpss.tar.gz是135.17 MB;这超过了GitHub的文件大小限制100mb

我遵循了“修复问题”列在GitHub帮助下的步骤,所以这不应该已经足够了吗?

当它不在本地或在git status/diff/push中列出时,文件如何仍然在以太中?


当前回答

我提出了一个非正统但简单的解决方案:

忘记你最近有问题的本地git存储库,git将你的存储库克隆到一个新的目录中。 Git远程添加上游<你的github代表这里> Git拉上游高手 在这一点上,只需复制您的新文件提交,从旧的可能包括您现在减少的大文件到您的新本地代表。 Git添加。 Git commit -m "你的提交文本在这里" Git push origin master

瞧!对我来说很管用。

其他回答

我也遇到了同样的问题,但没有一个答案适合我。我通过以下步骤来解决:

1. 找出哪个提交包含大文件

git log --all -- 'large_file`

底部提交是结果列表中最老的提交。

2. 找到最古老的那个。

git log

假设你有:

commit 3f7dd04a6e6dbdf1fff92df1f6344a06119d5d32

3. 变基

git rebase -i 3f7dd04a6e6dbdf1fff92df1f6344a06119d5d32

小贴士:

列表项 我只是选择删除提交包含大文件。 你可能会在rebase期间遇到冲突,修复它们并使用git rebase—继续继续,直到你完成它。 如果在rebase使用过程中出现任何错误,git rebase—abort来取消它。

我遇到了类似的问题,并使用上面的步骤删除文件。它工作得很完美。

然后我得到了一个错误的第二个文件,我需要删除: remote: error: File <path/filename> is 109.99 MB;这超过了GitHub的文件大小限制100.00 MB

我尝试了相同的步骤,得到一个错误:“以前的备份已经存在于<path/filename>”

从这个网站上的研究,我使用命令:git filter-branch——force——index-filter "git rm——cached——ignore-unmatch <path/filename>"——prune-empty——tag-name-filter cat -- --all

工作很好,大文件被删除了。

令人难以置信的是,推送仍然失败了,并出现了另一个错误:curl 56 OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 104 fatal:远端异常挂起

我通过直接修改.git配置文件- postBuffer = 999999999来修复这个问题

在那之后,推力通过了!

我认为这是因为您删除的文件可能已经存在于您的提交,以检查这个第一次使用

git log

这将返回你在当前分支中提交的列表,找到你要找的提交的id,

然后使用,

git show <commit_id>

这应该显示包含文件的提交细节

现在要解决你的问题,使用

git reset --soft HEAD~1

这里HEAD~1上的1代表之前的提交,你可以根据你需要的提交使用不同的数字。 如果你需要第二次最后提交,请使用git reset -soft HEAD~2

这将重置你的Head到以前的提交,如果这个提交没有大文件,那么你可以这样做,

git add .

git commit -m <message_for_commit>

git push origin <repo_name>

else

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

git reset --soft <commit_id>

然后从这里创建一个新的提交,删除文件并推送它

在GitHub上检查你上次提交的id 然后用这个

Git reset——soft <commit_id>

我想是因为工作。谢谢

不知怎的,这对我很管用。我尝试了所有的解决方案,但这个命令节省了我的时间。希望这也能帮助到你。


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

请自行承担风险。我不会为你的行为负责。

在根目录下执行该命令