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

时间:2016-02-23 15:47:27

标签: git git-rm

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

git rm --cached *everything_listed_in_gitignore*

如何实现这一目标?提前谢谢。

3 个答案:

答案 0 :(得分:3)

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

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

  2. 然后/会在该行的开头删除正斜杠rm -f

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

  4. 注意:

    您的*.tmp文件可以包含.tmp等条目,以忽略整个项目中的所有*.tmp个文件。上述命令只会从根目录中删除{{1}}个文件。只能正确处理完整路径。

答案 1 :(得分:2)

我发现另一种方法在https://ardalis.com/how-to-make-git-forget-tracked-files-in-gitignore的任何操作系统中都能更好地工作。

向.gitignore添加新规则后

git rm -r --cached .

git add .

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

答案 2 :(得分:1)

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

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

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

或者在Windows Powershell上:

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