git rm – fatal:pathspec没有匹配任何文件

我不小心添加了超过9000张照片到我的项目文件夹。 并承诺他们。 然后从磁盘中删除它们。 承诺。

现在我尝试将更改推送到git服务器。 但是花费太长时间,并且试图发送12Gb的数据。

我检查了磁盘上的文件大小,看到真正.git文件夹需要12 GB。

如何从那里删除照片 ? 我试过git rm ,但是失败了:

 ❯ git rm public/photos fatal: pathspec 'public/photos' did not match any files 

因为我已经从磁盘上删除了它们,但是它们仍然在.git文件夹中。

我试图将public/photos添加到.gitignore

 public/photos/ *.zip 

但没有结果。 当然,当我在我的项目中没有那么多垃圾照片的时候,我可以hard reset head 。 但是从那以后我做了很多次,代码做了很多改变。

在你的情况下,使用git filter-branch而不是git rm

git rm会删除这些文件,因为它们不会被git跟踪,但是不会删除那些对应于那些图像的旧提交对象,所以你仍然会被推迟提交对应于12GB的提交图片。

另一方面, git filter-branch也可以从所有以前的提交中删除这些文件,因此不需要推送它们中的任何一个。

  1. 使用该命令

     git filter-branch --force --index-filter \ 'git rm -r --cached --ignore-unmatch public/photos' \ --prune-empty --tag-name-filter cat -- --all 
  2. filter分支完成后,确认没有意外的文件丢失。

  3. 现在添加一个.gitignore规则

     echo public/photos >> .gitignore git add .gitignore && git commit -m "ignore rule for photos" 
  4. 现在推一下

     git push -f origin branch 

检查这一点 , 这和这个进一步的帮助。 为了更安全一点,我build议您在继续执行这些说明之前,在您的系统上创build回购的备份副本。

至于你的原始错误消息,它正在发生,因为你已经用git rm跟踪它们,因此git抱怨,因为它不能删除它不跟踪的文件。 阅读更多关于这里 。

步骤1

将文件名添加到.gitignore文件中。

第2步

 git filter-branch --force --index-filter \ 'git rm -r --cached --ignore-unmatch YOURFILE' \ --prune-empty --tag-name-filter cat -- --all 

第3步

 git push -f origin branch 

非常感谢@mu。

一个非常简单的答案是。

步骤1:

首先使用git add .你想要删除的未跟踪文件git add . 或者git add <filename>

第2步:

然后用命令git rm -f <filename>这里rm = remove和-f = forcely轻松删除它们。