git rm --cached results in fatal: pathspec

4

我在将一些文件添加到 .gitignore 后希望清理我的仓库,所以我运行了 git rm --cached * 命令,结果如下:
fatal: pathspec '$Recycle.Bin' did not match any files

我猜测这是由于文件名中的 $ 符号导致的,是否有一种解决方法?


如果你运行 rm --cached "$Recycle.Bin",会发生什么? - Lajos Arpad
相同的错误就是Lajos Arpad发生的情况。 - bgarcia
2个回答

4

这只是*的工作原理,与$无关。

$ ls
$Recycle.Bin
a
b

如果我运行git rm --cached *,shell会将其转换为git rm --cached $Recycle.bin a b,并将其传递给Git。
然而,$Recycle.Bin不是你的仓库的一部分,所以Git无法删除它。这是一个错误。最简单的解决方法是不使用--ignore-unmatch
$ git rm --cached --ignore-unmatch -- *

1
完美,只需要一个改变就是要递归执行,加上 -r 谢谢! git rm --cached --ignore-unmatch -r -- * - ehiller

1
解决方法是用更具界限的通配符/通配符替换'*'。例如,您可以使用形式为mydir/{dir1,dir2}/*.{js,css}的内容。
这应该会给您一些想法。
然后查看您对.gitignore的更改,并在每个行条目上执行git rm --cached操作,使用通配符将条目合并在一起,以防止您的gitignore变得臃肿。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接