不小心我推送了一个提交,其中包括应该被忽略的文件(node_modules 和 bower 组件目录)。由于我使用了许多依赖项,因此提交变得非常大,并且上传了很多数据。
我在另一个提交中删除了这些文件并包含了一个.gitignore
文件,但是每次我克隆应用程序时,所有这些大文件都会作为项目的历史记录下载。
有没有办法摆脱它?一种从我的 git存储库中明确删除node_modules和bower 组件目录的方法?
不小心我推送了一个提交,其中包括应该被忽略的文件(node_modules 和 bower 组件目录)。由于我使用了许多依赖项,因此提交变得非常大,并且上传了很多数据。
我在另一个提交中删除了这些文件并包含了一个.gitignore
文件,但是每次我克隆应用程序时,所有这些大文件都会作为项目的历史记录下载。
有没有办法摆脱它?一种从我的 git存储库中明确删除node_modules和bower 组件目录的方法?
你可以重写 git 历史并从 git 中删除这些对象。查看下一个链接https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History
即使您执行 a git rm
,这些文件也会在项目历史记录中继续存在。这样,您必须在克隆存储库时下载它们。要永久删除文件,您需要更改历史记录。
如果添加文件的提交是最近的,您可以在git reset
添加文件的提交之前执行提交。但是,如果文件是前一段时间添加的,则需要使用git filter branch
. 当我想从存储库中删除大文件时,我将展示一些我使用的步骤。
git filter-branch --index-filter 'git rm --cached --ignore-unmatch file-or-directory-that-you-want-to-remove-with-complete-path' --all.
然后,您需要执行 a git push -f
,因为您更改了项目历史记录。这样,当您再次克隆项目时,将不再下载已删除的文件。
我会说
git commit --amend
或者
git commit --rebase
但是,如果您要删除的文件已经存在了很长一段时间,那么:
git filter-branch --index-filter 'git rm --cached --ignore-unmatch filename' HEAD