6

完成所有工作后,我将.gitignore添加到我的项目中。现在我想运行如下命令:

git rm --cached *everything_listed_in_gitignore*

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

4

3 回答 3

4

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

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

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

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

笔记:

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

于 2016-02-23T15:59:40.773 回答
4

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

向 .gitignore 添加新规则后

git rm -r --cached .

git add .

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

于 2018-04-05T03:12:49.550 回答
4

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

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

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

或者,在 Windows Powershell 上:

git rm --cached $(git ls-files -i -X .gitignore)
于 2018-10-22T04:32:27.810 回答