从git repo历史中删除巨大的推送数据

时间:2013-01-10 23:09:29

标签: git

意外地我推送了一个提交,其中包括应该被忽略的文件(node_modules和bower组件目录)。 由于我使用了很多依赖项,因此提交相当大,并且上传了大量数据。

我在另一次提交中删除了这些文件并包含了.gitignore文件,但是每次克隆应用程序时,所有这些大文件都会作为项目的历史记录下载。

有没有办法摆脱这种情况?一种从我的git repo中明确删除 node_modules bower组件目录的方法吗?

3 个答案:

答案 0 :(得分:1)

你可以重写git历史记录并从git中删除这些对象。 查看下一个链接https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History

答案 1 :(得分:0)

我会说

git commit --amend

git commit --rebase

但是如果要删除的文件已存在很长时间了,那么:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch filename' HEAD

答案 2 :(得分:0)

即使您执行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.

然后,您需要执行git push -f,因为您更改了项目历史记录。这样,当您再次克隆项目时,将不再下载已删除的文件。