我的存储库中有一些文件应该被忽略,我将它们添加到 .gitignore 但是,当然,它们没有从我的存储库中删除。
所以我的问题是,是否有一个使用 filter-branch 的神奇命令或脚本可以重写我的历史记录并轻松删除所有这些文件?或者只是一个将创建将删除它们的提交的命令?
您可以手动将它们从存储库中删除:
git rm --cached file1 file2 dir/file3
或者,如果您有很多文件:
git rm --cached `git ls-files -i -c --exclude-from=.gitignore`
但这似乎不适用于 Windows 上的 Git Bash。它会产生一条错误消息。以下效果更好:
git ls-files -i -c --exclude-from=.gitignore | xargs git rm --cached
在 Windows 上的 PowerShell 中,这效果更好(处理路径和文件名中的空格):
git ls-files -i -c --exclude-from=.gitignore | %{git rm --cached $_}
关于在没有这些文件的情况下重写整个历史,我非常怀疑是否有一种 自动 的方法可以做到这一点。 而且我们都知道重写历史是不好的,不是吗?:)