git - 如何从我的 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 不接受这个删除!为什么它仍然要上传已删除的文件?任何人都可以帮助我吗?
解决方案
文件并不完全存在于分支中。它们存在于提交中——然后包含在分支中,因此您可以从 Z 点返回到 A 点,但您必须先经过所有中间点。
这正是您的问题:大文件modules/db.db
存在于一大堆提交中(或者可能只存在于一个提交中)。当你运行git rm
thengit commit
时,你做了一个新的提交。新的提交省略了文件,但所有现有的提交仍然存在,并且仍然包含文件。
您必须找到包含大文件的所有现有提交,并修复它们——这本身是不可能的:任何现有提交都无法更改,永远:不能由您更改,也不能由 Git 本身更改。因此,这意味着您必须找到包含大文件的所有现有提交,并将它们完全丢弃。
如果其中有有价值的数据,您将希望将有价值的数据从这些提交中复制到新的和改进的提交中,就像原始提交一样,只是它们省略了这个大文件。然后,您将需要重新排列现有的分支名称,以便找到新的和改进的提交,而不是查找旧的提交(因为它们包含大文件而不好)。
如果旧的提交中根本没有有价值的数据,你可以把它们全部扔掉,然后做一个新的最终提交来存储正确的文件,并省略大文件。
推荐阅读
- git - 错误 Git SVN 克隆:使用未初始化的值 $sha1
- python - 我如何只从 Python 中的超类继承一些变量
- sqlite - 如何在运行 Micronaut 功能测试时备份和恢复 sqlite db
- javascript - 如何最好地更新 Vuejs 模板中 v-for 循环下的 DOM 的一部分
- reactjs - 在 react 中使用 chartjs 显示值或百分比
- github - 如何使github STFU关于合并后删除分支
- reactjs - 导航栏项目在 md 断点处跳转到网格项目容器内的新行
- c# - 我的网络代码只是在我的本地网络中工作
- python - Python请求代理模块问题
- javascript - 反应Js | 无法读取未定义的属性“道具”