我一直在遇到一个场景,我们团队中的某个人在没有先向他们的项目添加.gitignore的情况下推动了初始提交。这导致一堆文件最终出现在我们不想跟踪的仓库中。
git ls-files -i --exclude-from=.gitignore
给我一个.gitignore忽略的文件列表
和
git rm --cached <file>
让我从repo中一次删除一个文件,但是将它们保存在我的工作目录中(我想要的)
有没有办法可以将文件列表从ls-files
传输到rm --cached
(或者其他一些方法可以让我从我的存储库中删除被跟踪的,被忽略的文件)?
我们的一个团队成员编写了一个使用正则表达式执行此操作的shell脚本,但我正在寻找一个仅限命令行的解决方案(如果存在)。
答案 0 :(得分:5)
您可以尝试:
git rm --cached $(git ls-files -i --exclude-from=.gitignore)
(遵循相同的想法,而不是对于已删除的文件 “git remove files which have been deleted”,或“git: how to add/commit removals made via vanilla rm?”或“Removing multiple files from a Git repo that have already been deleted from disk”)。
或者:一个简单的管道也可以工作:
git ls-files -i --exclude-from=.gitignore | xargs -0 git rm --cached