在我提交了所有内容之后,我将 .gitignore 添加到了我的项目中。现在我想运行如下命令:
git rm --cached *everything_listed_in_gitignore*
如何实现这一目标?提前谢谢。
答案 0 :(得分:3)
我总是使用以下行删除.gitignore
中列出的文件:
grep -vP "^(#|\$)" .gitignore|sed "s/^\///"|xargs rm -f
这会在.gitignore
中找到与-v
选项不匹配的行(^(#|\$)
grep选项)正则表达式#
匹配以sed
开头的行(注释)或空行。
然后/
会在该行的开头删除正斜杠rm -f
。
使用xargs
将结果传递给git rm --cached
,您可以将其替换为.gitignore
注意:强>
您的*.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)