git rm --cached 中列出的所有内容。git忽略

git rm --cached everything that is listed in .gitignore

我在提交所有内容后将 .gitignore 添加到我的项目中。现在我想 运行 像这样的命令:

git rm --cached *everything_listed_in_gitignore*

如何实现?提前谢谢你。

我总是使用以下行来删除我 .gitignore 中列出的文件:

grep -vP "^(#|$)" .gitignore|sed "s/^\///"|xargs rm -f
  1. 这将在 .gitignore 中找到不匹配的行(grep 的 -v 选项)正则表达式 ^(#|$) 匹配以 [=15 开头的行=](注释)或空行。

  2. 然后 sed 将删除行首的正斜杠 /

  3. 结果使用 xargs 传递给 rm -f,您可以将其替换为 git rm --cached

注:

您的 .gitignore 文件可以包含 *.tmp 之类的条目,以忽略整个项目中的所有 .tmp 文件。上面的命令只会从根目录中删除 *.tmp 个文件。只有完整路径才会被正确处理。

我从 https://ardalis.com/how-to-make-git-forget-tracked-files-in-gitignore 找到了另一种在任何操作系统中都运行得更好的方法。

向 .gitignore 添加新规则后

git rm -r --cached .

git add .

基本上,它会删除所有内容并重新添加所有内容。添加时,Git会忽略基于.gitignore

的文件

有一个更短的版本,答案来自here

您还可以根据您的 .gitignore 从存储库中删除文件,而不会将它们从本地文件系统中删除:

git rm --cached `git ls-files -i -X .gitignore`

或者,或者,在 Windows Powershell 上:

git rm --cached $(git ls-files -i -X .gitignore)