git-filter-branch,从 Git 仓库提交历史记录中永久删除某些文件
有时,我们会忘记把含有重要安全信息的信息加入 .gitignore 文件中,或者无意中把诸如 vendor、node_modules 这样的文件夹加入到 git 中。这时候我们就不能仅仅删除当前版本记录,还需要到git仓库的历史记录中去永久删除这些文件。此时,我们就要用到
git filter-branch
命令。
假设我们有个密钥文件 storage/key.pem
被加入到git中,要删除它:
git filter-branch --force --prune-empty --index-filter "git rm --cached --ignore-unmatch storage/key.pem" -- --all
如果遇到 fatal: bad revision ‘rm’ 这样的问题,那么你要记住这个命令在 windows 下操作是使用双引号,而不是单引号。
假如文件名含有空格 storage/key copy.pem
,可以在文件名中使用转义字符加入双引号,将文件名包起来:
git filter-branch --force --prune-empty --index-filter "git rm --cached --ignore-unmatch \"storage/key copy.pem\"" -- --all
如果需要删除的是文件夹在 rm 里加上 -rf
git filter-branch -f --index-filter "git rm --cached --ignore-unmatch -rf ./node_modules" --prune-empty -- --all
指定文件删除后,把当前记录推送到 Github
git push origin main --force