Git 我如何删除由于repo中的一个大文件(该文件已被删除)而导致的未推送提交?

Git 我如何删除由于repo中的一个大文件(该文件已被删除)而导致的未推送提交?,git,git-commit,Git,Git Commit,我是git的初学者。我的repo有简单的MATLAB代码文件。我犯了一个错误,将一个大文件上传到repo(>100MB)。之后,我使用了以下命令 git add --all git commit --all --message "Moar" git push --all push命令引发了以下错误: 远程:错误:GH001:检测到大文件。你可能想试试Git 大文件存储-。 远程:错误:跟踪:47cf7a12aa48e59e3007901d70e3843b 远程:错误:有关详细信息,请参阅。

我是git的初学者。我的repo有简单的MATLAB代码文件。我犯了一个错误,将一个大文件上传到repo(>100MB)。之后,我使用了以下命令

git add --all
git commit --all --message "Moar"
git push --all 
push命令引发了以下错误:

远程:错误:GH001:检测到大文件。你可能想试试Git 大文件存储-。 远程:错误:跟踪:47cf7a12aa48e59e3007901d70e3843b 远程:错误:有关详细信息,请参阅。 远程:错误:文件prepo/workbench-windows64-v1.3.2/workbench/bin_windows64/rfMRI_REST1_LR_Atlas.dtseries.nii 是418.46MB;这超出了GitHub的100.00 MB文件大小限制 ... ! [远程拒绝]主机->主机(拒绝预接收挂钩)

然后我惊慌失措,删除了上面导致错误的大文件。但是现在,当我试图向我的主人施压时,我仍然会犯同样的错误

这些大文件不再存在于我的本地回购中。那为什么git不让我推?此外,发生这种情况后,我在本地回购中做了一些更改,因此如果没有这些大文件,我无法恢复到最近的提交


有没有办法让git知道大型文件不再存在于repo中,从而干净、准确地做到这一点?

既然您是初学者,请阅读此答案,它将为您提供大量信息。


为了从旧提交中删除内容,我建议使用以下工具:

它是完成这类任务的完美工具

BFG回购清洁剂 git过滤器分支的替代方法

BFG是git filter分支的一种更简单、更快的替代方法,用于清除git存储库历史记录中的不良数据:

  • 删除疯狂的大文件
  • 删除密码、凭据和其他私有数据
示例(来自官方网站) 在所有这些示例中,bfg是java-jar bfg.jar的别名

大文件仍在您的存储库中。您的存储库包含提交;每个提交都包含提交的每个文件。您添加了一个不包含该文件的后期提交,但早期提交仍然包含该文件。看见
# Delete all files named 'id_rsa' or 'id_dsa' :
bfg --delete-files id_{dsa,rsa}  my-repo.git