目前我有

空的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 filter-branch——index-filter 'git rm -r——cached——ignore-unmatch ' HEAD

从原点到主节点会有一些合并冲突。

你的分支和'origin/master'已经分道扬镳, 分别有114和109个不同的提交。 (使用“git pull”将远程分支合并到您的分支中)

请运行这个

Git重置-硬源/主

它将丢弃我所有阶段性和非阶段性的变化,忘记我当前本地分支上的所有内容,并使其与origin/master完全相同。

其他回答

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

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>

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

当我的iOS项目没有gitignore文件时,我就遇到了这个问题

我想它可能是想把一个巨大的文件推送到github而github可能拒绝了这个巨大的文件或(多个文件)

对我有用的是:

重命名我的GitHub项目文件夹到其他东西 用正确的文件夹名称重新克隆repo 删除我重命名的repo中的.git文件夹(可能必须打开允许查看Windows中的隐藏文件) 将.git文件夹从正确的文件夹名移动到已重命名的文件夹名 删除重新克隆的repo文件夹,将原repo文件夹重命名为正确的名称 提交您的更改(没有大文件)并推送

我发现压缩比过滤分支更有用。我做了以下事情:

本地删除大文件。 提交本地删除。 软重置回X次提交(对我来说是3):git重置-软头~3。 然后重新提交所有的更改(AKA squash) git commit -m "合并提交的新消息" 推送压缩提交。

特殊情况(来自用户@lituo):如果上述情况不起作用,那么您可能会遇到这种情况。提交1包含大文件,由于大文件错误,提交1的推送失败。提交2删除了git rm——cached [file_name]的大文件,但提交2的推送仍然失败。您可以遵循上面相同的步骤,但不要使用HEAD~3,而是使用HEAD~2。

这对我很管用。来自github的文档 压缩Git提交 Git重置原点/master

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

在这里查找文档