在做个人项目的时候,有时为了开源需要对数据进行脱敏,尤其是一些log文件。
先确认代码里还有没有其他“XXX”?
执行这条精准排除命令:
git grep -w "XXX" $(git rev-list –all) — ":!*.log"
如果没有输出,证明没有包含相关字符串的文件,如果有输出则需要进行如下操作,彻底删除文件的历史。
⚠️警告,以下操作会改写所有 Commit 的 Hash 值,必须强制推送!
1.在项目根目录执行清洗命令
git filter-branch –force –index-filter \\
'git rm –cached –ignore-unmatch "*/hs_err_pid*.log"' \\
–prune-empty –tag-name-filter cat — –all
执行过程中终端会疯狂滚动 “Rewriting …”,耐心等待即可。
2. 清理 Git 内部备份
rm -rf .git/refs/original/
git reflog expire –expire=now –all
git gc –prune=now
3. 防止再次犯错,在 .gitignore 中永久屏蔽
# JVM 崩溃日志
hs_err_pid*.log
*.log
4.删除本地log文件,强制推送覆盖远程仓库
# 删除当前文件
git rm –force hs_err_pid*.log
git add .gitignore
git commit -m "chore: 删除误上传的JVM崩溃日志 + 屏蔽所有.log文件提交"
git push origin –force –all
5.验证是否彻底干净
git grep -w "XXX" $(git rev-list –all)
如果没有任何输出,则大功告成。
