从历史记录中彻底删除文件

从历史记录中彻底删除文件。

  • 使用 git rm --cached --ignore-unmatch <path> 命令删除指定 <path> 下的文件。
  • 使用 git filter-branch --force --index-filter <command> --prune-empty --tag-name-filter cat -- --all 命令重写分支的历史记录,并传递之前的命令。
  • 可选择使用 git push <remote> --force --all 命令将更改强制推送到远程仓库。

[!CAUTION]

这是一个破坏性操作,会重写整个仓库的历史记录。确保你知道自己在做什么。

git filter-branch --force --index-filter \
  "git rm --cached --ignore-unmatch <path>" \
  --prune-empty --tag-name-filter cat -- --all
git push <remote> --force --all

# 示例
git filter-branch --force --index-filter \
  "git rm --cached --ignore-unmatch config/apiKeys.json" \
  --prune-empty --tag-name-filter cat -- --all
# 从历史记录中彻底删除 `config/apiKeys.json` 文件
git push origin --force --all
# 强制推送更改到远程仓库