如何删除.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 -h
或man git-clean
(在unix中)会给你提供帮助。
请注意,该命令还将删除不在临时区域中的新文件 。
希望能帮助到你。
我通过使用sed操作.gitignore语句的输出做了一个非常简单的解决scheme:
cat .gitignore | sed '/^#.*/ d' | sed '/^\s*$/ d' | sed 's/^/git rm -r /' | bash
说明:
- 打印.gitignore文件
- 删除打印中的所有评论
- 删除所有空行
- 将“git rm -r”添加到行的开头
- 执行每一行。
将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'
删除被忽略的文件。