在做个人项目的时候,有时为了开源需要对数据进行脱敏,尤其是一些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)
如果没有任何输出,则大功告成。