首页 > 解决方案 > 如何从我的 git 本地分支中明确删除文件?

问题描述

环境 :

视窗 10

我想在我的远程主 github 存储库上推送一些文件。文件太大时出现问题。

所以我用以下命令删除了它:

git rm modules/db.db

我做了一个提交,当我尝试再次将我的本地分支推送到主分支时,我再次收到相同的错误消息:

C:\Users\gauth\Documents\github\abc>git push origin master
Enumerating objects: 263, done.
Counting objects: 100% (263/263), done.
Delta compression using up to 6 threads
Compressing objects: 100% (262/262), done.
Writing objects: 100% (263/263), 49.93 MiB | 6.17 MiB/s, done.
Total 263 (delta 75), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (75/75), done.
remote: error: Trace: 68110557c386982431ba3a2ec8e09d4c9ee8400e835d0490d29c096b851007e1
remote: error: See http://git.io/iEPt8g for more information.
remote: error: File modules/db.db is 144.78 MB; this exceeds GitHub's file size limit of 100.00 MB
remote: error: GH001: Large files detected. You may want to try Git Large File Storage - https://git-lfs.github.com.
To https://github.com/abc/abc.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://github.com/abc/abc.git'

我不明白为什么 git 不接受这个删除!为什么它仍然要上传已删除的文件?任何人都可以帮助我吗?

标签: gitgithub

解决方案


文件并不完全存在于分支中。它们存在于提交中——然后包含在分支中,因此您可以从 Z 点返回到 A 点,但您必须先经过所有中间点。

这正是您的问题:大文件modules/db.db存在于一大堆提交中(或者可能只存在于一个提交中)。当你运行git rmthengit commit时,你做了一个的提交。的提交省略了文件,但所有现有的提交仍然存在,并且仍然包含文件。

您必须找到包含大文件的所有现有提交,并修复它们——这本身是不可能的:任何现有提交都无法更改,永远:不能由您更改,也不能由 Git 本身更改。因此,这意味着您必须找到包含大文件的所有现有提交,并将它们完全丢弃

如果其中有有价值的数据,您将希望将有价值的数据这些提交中复制到新的和改进的提交中,就像原始提交一样,只是它们省略了这个大文件。然后,您将需要重新排列现有的分支名称,以便找到新的和改进的提交,而不是查找旧的提交(因为它们包含大文件而不好)。

如果旧的提交中根本没有有价值的数据,你可以把它们全部扔掉,然后做一个新的最终提交来存储正确的文件,并省略大文件。

请参阅如何从 Git 存储库的提交历史记录中删除/删除大文件?


推荐阅读