从repo中删除跟踪的忽略文件,但不从本地删除

时间:2012-08-03 16:26:50

标签: git gitignore

我一直在遇到一个场景,我们团队中的某个人在没有先向他们的项目添加.gitignore的情况下推动了初始提交。这导致一堆文件最终出现在我们不想跟踪的仓库中。

git ls-files -i --exclude-from=.gitignore
给我一个.gitignore忽略的文件列表

git rm --cached <file>
让我从repo中一次删除一个文件,但是将它们保存在我的工作目录中(我想要的)

有没有办法可以将文件列表从ls-files传输到rm --cached(或者其他一些方法可以让我从我的存储库中删除被跟踪的,被忽略的文件)?

我们的一个团队成员编写了一个使用正则表达式执行此操作的shell脚本,但我正在寻找一个仅限命令行的解决方案(如果存在)。

1 个答案:

答案 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