# 将 PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA 替换为您要删除的文件的路径,而不仅仅是其文件名。如果含有敏感数据的文件曾经存在于任何其他路径中(因为它已被移动或重命名),则也必须在这些路径上运行此命令。这些参数将: # 强制 Git 处理但不检出每个分支和标记的完整历史记录 # 删除指定的文件,以及因此生成的任何空提交 # 覆盖现有的标记 # 重写历史 # --force 拒绝从现有的临时目录开始,强制执行改写操作 # --index-filter 与 tree-filter 相比不检查树,和 git rm 搭配使用更快的生成版本 # --ignore-unmatch 即使没有文件匹配,也以零状态退出 # --prune-empty 删除修改后的提交为空记录 # --tag-name-filter cat 来简单地更新标签 # --all 是针对所有的分支,前面的 -- 是为了让分隔 git filter-branch 和 --all 以将命令行选项与文件列表分开 git filter-branch --force --index-filter \ "git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA" \ --prune-empty --tag-name-filter cat -- --all # 强制推送本地以覆盖远程所有分支 git push --force --all # 从标记的发行版删除敏感文件 git push --force --tags # 确认无误后整理版本库 # git for-each-ref 输出指定位置所有 reflog 条目,--format 指定带有特定字符的 Object # git update-ref 更新 reflog 条目 git for-each-ref --format="delete %(refname)" refs/original | git update-ref --stdin # 让撤销的提交立即过期 git reflog expire --expire=now --all # 整理版本库并清理未被关联的松散对象 git gc --aggressive --prune=now
参考资料
https://docs.github.com/cn/github/authenticating-to-github/removing-sensitive-data-from-a-repository
https://www.worldhello.net/gotgit/02-git-solo/110-git-admin.html
本文标题:从 Git 仓库中删除敏感数据
版权声明:本文使用「署名 4.0 国际」创作共享协议,转载或使用请遵守署名协议。
相关文章
上一篇:Linux 常用命令