小编典典

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

all

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

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


阅读 102

收藏
2022-03-13

共1个答案

小编典典

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

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 $_}

关于在没有这些文件的情况下重写整个历史,我非常怀疑是否有一种 自动 的方法可以做到这一点。
而且我们都知道重写历史是不好的,不是吗?:)

2022-03-13