完成所有工作后,我将.gitignore添加到我的项目中。现在我想运行如下命令:
git rm --cached *everything_listed_in_gitignore*
如何做到这一点?先感谢您。
我总是使用以下行来删除我列出的文件.gitignore
:
grep -vP "^(#|\$)" .gitignore|sed "s/^\///"|xargs rm -f
这将找到.gitignore
不匹配(-v
grep 的选项)正则表达式^(#|\$)
匹配以(注释)开头的#
行或空行的行。
然后sed
将删除行首的正斜杠/
。
结果被传递给rm -f
using xargs
,您可以将其替换为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 的文件
有一个较短的版本,答案取自这里。
您还可以根据您的 .gitignore 从存储库中删除文件,而无需从本地文件系统中删除它们:
git rm --cached `git ls-files -i -X .gitignore`
或者,在 Windows Powershell 上:
git rm --cached $(git ls-files -i -X .gitignore)