能否保留提交记录的同时隐藏部分代码变更 避免提交历史出现不规范日志
可以实现,你可以通过Git的历史重写功能,在保留所有提交的核心属性(作者、提交时间、提交信息、其他代码变更)的前提下,批量或定向修改历史提交中的不规范日志字符串,修改完成后原先的不规范内容不会出现在可查询的提交历史中。
少量提交修改方案
如果涉及不规范内容的提交数量较少,推荐用交互式变基操作定向修改:
- 找到最早出现不规范日志的提交的父提交哈希值,执行命令:
git rebase -i <父提交哈希> - 在弹出的编辑界面中,将所有需要修改的提交前的
pick参数修改为edit,保存后退出 - Git会逐个停在你标记为edit的提交位置,此时手动修改对应文件中的不规范日志为规范内容
- 修改完成后执行
git add <修改的文件路径>,再执行git commit --amend --no-edit,该操作会将当前改动合并进历史提交,同时完全保留原提交的作者、时间、提交说明等信息 - 所有需要修改的提交都处理完成后,执行
git rebase --continue完成变基流程
多提交批量修改方案
如果不规范内容分散在大量历史提交中,推荐使用Git官方推荐的git filter-repo工具做批量替换:
- 首先整理所有需要替换的字符串映射关系,执行如下示例命令即可完成全历史扫描替换:
git filter-repo --replace-text <(echo ' oh sh%t! we got an db connection error here!==>db connection error access denied. f*#k you==>access denied # 可按相同格式添加更多替换规则 ')
- 命令执行完成后,工具会自动遍历所有历史提交,替换所有匹配的字符串,其他提交属性不会发生任何变化。
重要注意事项
- 如果涉及的提交已经推送到公共远程仓库,修改完成后需要执行
git push --force-with-lease强制覆盖远程分支。操作前必须同步所有团队成员,要求所有人删除旧的本地分支、重新拉取修改后的远程分支,避免旧的带不规范内容的提交被再次推送 - 已经被第三方fork的仓库副本无法通过上述操作修改,如有相关泄露风险需要提前评估
- 后续可以在CI流程中添加代码扫描规则,提交前自动拦截包含不规范/敏感内容的提交,从入口避免同类问题再次发生
内容的提问来源于stack exchange,提问作者scripter2021
相关产品推荐
相关产品推荐

