git rm --cached .gitignore 中列出的所有内容

Ale*_*mia 6 git git-rm

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

git rm --cached *everything_listed_in_gitignore*
Run Code Online (Sandbox Code Playgroud)

如何做到这一点?先感谢您。

Jac*_*Goh 8

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

添加新规则到 .gitignore 后

git rm -r --cached .

git add .
Run Code Online (Sandbox Code Playgroud)

基本上,它会删除所有内容并将所有内容添加回来。添加时,Git会忽略基于.gitignore的文件


Иль*_*ько 6

有一个较短的版本,答案取自here

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

git rm --cached `git ls-files -i -X .gitignore`
Run Code Online (Sandbox Code Playgroud)

或者,在 Windows Powershell 上:

git rm --cached $(git ls-files -i -X .gitignore)
Run Code Online (Sandbox Code Playgroud)


7oc*_*hem 4

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

grep -vP "^(#|\$)" .gitignore|sed "s/^\///"|xargs rm -f
Run Code Online (Sandbox Code Playgroud)
  1. 这将查找与以(注释)或空行开头的正则表达式匹配的行.gitignore不匹配( grep 的选项)的行。-v^(#|\$)#

  2. 然后将删除行开头的sed正斜杠。/

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

笔记:

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

  • 如果 macOS 标准 `grep` 上缺少 `-P` 选项,请使用 [`brew install grep --with-default-names`](/sf/answers/1589307121/) 安装一个选项。 (2认同)