git 从存储库中删除敏感数据(删除文件历史)
使用 git filter-repo 工具
1、如果您的历史记录中还没有包含敏感数据的存储库的本地副本,请将存储库克隆到本地计算机。
git clone https://github.com/YOUR-USERNAME/YOUR-REPOSITORY Initialized empty Git repository in /Users/YOUR-FILE-PATH/YOUR-REPOSITORY/.git/ remote: Counting objects: 1301, done. remote: Compressing objects: 100% (769/769), done. remote: Total 1301 (delta 724), reused 910 (delta 522) Receiving objects: 100% (1301/1301), 164.39 KiB, done. Resolving deltas: 100% (724/724), done.
2、切换到存储库的工作目录,克隆完成后库的根目录。
cd YOUR-REPOSITORY
3、运行以下命令,替换为要删除的文件PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA
的路径,而不仅仅是文件名。这些论点将:
- 强制Git处理,但不检查每个分支和标记的整个历史记录
- 删除指定的文件,以及作为结果生成的任何空提交
- 覆盖现有标签,重写历史
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 Rewrite 48dc599c80e20527ed902928085e7861e6b3cbe6 (266/266) Ref 'refs/heads/master' was rewritten Ref 'refs/remotes/origin/master' was rewritten WARNING: Ref 'refs/remotes/origin/master' is unchanged
4、添加包含敏感数据的文件,.gitignore
以确保您不会意外地再次提交它。
echo "YOUR-FILE-WITH-SENSITIVE-DATA" >> .gitignore git add .gitignore git commit -m "Add YOUR-FILE-WITH-SENSITIVE-DATA to .gitignore" [master 051452f] Add YOUR-FILE-WITH-SENSITIVE-DATA to .gitignore 1 files changed, 1 insertions(+), 0 deletions(-)
5、仔细检查您是否从存储库的历史记录中删除了所需的所有内容,并检查了所有分支机构。
6、一旦您对存储库的状态感到满意,强制推送您的本地更改以覆盖您的GitHub存储库,以及您推送的所有分支:
git push origin --force --all Counting objects: 1074, done. Delta compression using 2 threads. Compressing objects: 100% (677/677), done. Writing objects: 100% (1058/1058), 148.85 KiB, done. Total 1058 (delta 590), reused 602 (delta 378) To https://github.com/YOUR-USERNAME/YOUR-REPOSITORY.git + 48dc599...051452f master -> master (forced update)
7、要从标记版本中删除敏感文件,您还需要强制推送Git标记:
git push origin --force --tags Counting objects: 321, done. Delta compression using up to 8 threads. Compressing objects: 100% (166/166), done. Writing objects: 100% (321/321), 331.74 KiB | 0 bytes/s, done. Total 321 (delta 124), reused 269 (delta 108) To https://github.com/YOUR-USERNAME/YOUR-REPOSITORY.git + 48dc599...051452f master -> master (forced update)
8、经过一段时间后,您确信 git filter-branch
没有意外的副作用,您可以使用以下命令(使用Git 1.8.5或更高版本)强制取消引用本地存储库中的所有对象并进行垃圾回收:
git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin git reflog expire --expire=now --all git gc --prune=now Counting objects: 2437, done. Delta compression using up to 4 threads. Compressing objects: 100% (1378/1378), done. Writing objects: 100% (2437/2437), done. Total 2437 (delta 1461), reused 1802 (delta 1048)
9、执行完成后会删除你的操作的数据文件
使用 BFG Repo-Cleaner 工具
要删除包含敏感数据的文件并保持最新提交不变,请运行:
$ bfg --delete-files YOUR-FILE-WITH-SENSITIVE-DATA
要替换可以在存储库的历史记录中找到的 passwords.txt
列出的所有文本,请运行:
$ bfg --replace-text passwords.txt
删除敏感数据后,必须将更改强制推送到 GitHub。
$ git push --force
相关文章:Removing sensitive data from a repository
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现