4

我经常遇到这样一种情况,我们团队中的某个人在没有先向他们的项目中添加 .gitignore 的情况下推送初始提交。这会导致一堆文件最终出现在我们不想跟踪的 repo 中。

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

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

有没有一种方法可以将文件列表从管道传输ls-filesrm --cached (或其他一些允许我从我的存储库中删除跟踪的、忽略的文件的方法)?

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

4

1 回答 1

5

你可以试试:

git rm --cached $(git ls-files -i --exclude-from=.gitignore)

(遵循与“ git remove files which has been deleted ”或“ git: how to add/commit removes made via vanilla rm? ”或“ Removing multiple files from a Git repo that已从磁盘中删除")。

或者:一个简单的管道也可以工作:

git ls-files -i --exclude-from=.gitignore | xargs -0 git rm --cached
于 2012-08-03T16:46:52.257 回答