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
也可以从所有以前的提交中删除这些文件,因此不需要推送它们中的任何一个。
-
使用该命令
git filter-branch --force --index-filter \ 'git rm -r --cached --ignore-unmatch public/photos' \ --prune-empty --tag-name-filter cat -- --all
-
filter分支完成后,确认没有意外的文件丢失。
-
现在添加一个.gitignore规则
echo public/photos >> .gitignore git add .gitignore && git commit -m "ignore rule for photos"
-
现在推一下
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轻松删除它们。