我最近在本地创建了一个新目录,并使用其他源代码控制将我所做的所有更改从另一个项目复制到了该新目录中。
在我做的新目录内
git remote add origin [email protected]/user/repo.git //ssh url to my empty Github Repo
[之后,我做了git status
,然后git全部添加并git commit。最终,我做了git push
,但我不断遇到有关无法将其推送到Github的大文件的错误。为此,我做了git lfs install
和git lfs track "*.[filename]"
,但这似乎没有用,所以我只是从新目录中删除了它。删除后,我再次执行git status
并删除了这些文件。但是,当我按入时,仍然出现有关大文件并检出lfs
工具的错误。当我进入新目录时,git抱怨的大文件不再存在。
您可以在首次提交大文件之前尝试将存储库重置回原来的位置:
git reset HEAD~2 --soft
然后整理一下内容,再次单击commit
和push
。
另一种方法是使用filter-branch
,根据git手册页:
假设您要从所有提交中删除文件(包含机密信息或侵犯版权的文件:
git filter-branch --tree-filter 'rm filename' HEAD
原因是,即使您现在删除了那些文件,它们仍然是该第一次提交的一部分。 Git希望保留存储库的完整历史记录(嘿,那是您要使用它的原因之一,对吗?),因此它会将这些文件保留为该提交历史记录的一部分。
删除后,我再次执行git status并提交了这些文件的删除。但是,当我按下按钮时,仍然会遇到有关大文件并检查lfs工具的错误。当我进入新目录时,git抱怨的大文件不再存在。
我想你是说你对大文件做了git rm
。这会从当前工作目录中删除文件,并且在您git commit
添加提交后,该文件显示已删除。但是,添加大文件的提交仍保留在git存储库的历史记录中。这意味着当您git push
时,它仍将尝试推送添加了大文件的提交。
如果最近添加了大文件,则可以在添加前使用git reset
将当前分支重置为提交。请注意,这将删除自该提交以来的所有更改。如果您要保留其他更改,则需要使用git filter-branch
或第三方工具。 How to remove/delete a large file from commit history in Git repository?对如何执行此操作有很好的描述。