如何删除.gitignore中列出但仍在存储库中的文件?

我的资源库中有一些文件应该被忽略,我将它们添加到.gitignore中,但是当然,它们不会从我的资源库中删除。

所以我的问题是,是否有一个神奇的命令或脚本使用filter-branch可以重写我的历史logging,并轻松地删除所有这些文件? 或者只是一个将创build一个提交将删除它们的命令?

您可以手动将其从存储库中删除:

git rm --cached file1 file2 dir/file3 

或者,如果你有很多文件:

 git rm --cached `git ls-files -i --exclude-from=.gitignore` 

但是,这似乎并没有在Windows上的Git Bash中工作。 它会产生一个错误信息。 以下工作更好:

 git ls-files -i --exclude-from=.gitignore | xargs git rm --cached 

关于没有这些文件重写整个历史,我很怀疑有一个自动的方式来做到这一点。
我们都知道重写历史是不好的,不是吗? 🙂

在任何操作系统上工作的更简单的方法是做

 git rm -r --cached . git add . git commit -m "Removing all files in .gitignore" 

你基本上读过除.gitignore中的文件外的所有文件

由于.gitignore中的文件没有被跟踪,因此可以使用git clean命令recursion删除不受版本控制的文件。

使用git clean -xdn执行一个git clean -xdn运行并查看将被删除的内容。
然后使用git clean -xdf来执行它。

基本上, git clean -hman git-clean (在unix中)会给你提供帮助。

请注意,该命令还将删除不在临时区域中的新文件

希望能帮助到你。

我通过使用sed操作.gitignore语句的输出做了一个非常简单的解决scheme:

cat .gitignore | sed '/^#.*/ d' | sed '/^\s*$/ d' | sed 's/^/git rm -r /' | bash

说明:

  1. 打印.gitignore文件
  2. 删除打印中的所有评论
  3. 删除所有空行
  4. 将“git rm -r”添加到行的开头
  5. 执行每一行。

将gitignore模式添加到.gitignore后,git会忽略匹配.gitignore模式的文件。

但是存储库中已经存在的文件仍然存在。

使用git rm files_ignored; git commit -m 'rm no use files' git rm files_ignored; git commit -m 'rm no use files'删除被忽略的文件。