如何恢复git blame历史 消除注释代码提交对代码溯源的影响
解决方案
不用完全从头开始操作,根据你的提交是否已经推送到远程公共仓库,可选择以下两种低成本方案:
方案1:提交未推送至远程仓库,直接修改本地历史
如果你的两次提交(注释测试、取消注释)还没有推送到远程,用交互式rebase拆分冗余提交即可:
- 首先找到注释测试那次提交的父提交哈希,如果你两次提交是最近的2条提交,执行命令:
git rebase -i HEAD~2 - 在弹出的编辑界面中,将注释测试对应的提交行开头的
pick修改为edit,保存退出 - 此时Git会停在该提交的处理节点,执行
git reset HEAD~将该提交的所有改动撤回到工作区 - 分两次提交改动:
- 仅提交你需要保留的非测试相关修改,不要改动测试模块文件
- 提交测试模块的注释改动(该提交后续会被自动抵消)
- 执行
git rebase --continue继续rebase流程,后续的取消注释提交会自动应用,因为两次测试模块的改动完全抵消,Git会提示该提交无有效改动,直接选择跳过该提交即可 - 操作完成后,测试模块的提交历史会完全恢复到你改动前的状态,
git blame将正常显示原作者信息,你需要保留的其他修改也会完整留存
方案2:提交已推送至公共远程仓库,无需修改历史
如果提交已经推送,修改公开历史会影响其他协作成员,可以用Git原生的blame忽略提交功能实现需求:
- 先执行
git log获取注释测试、取消测试注释这两次提交的完整哈希值 - 在项目根目录新建
.git-blame-ignore-revs文件,写入以下内容:
# 临时注释测试用例提交 <注释测试的提交哈希> # 恢复测试用例提交 <取消注释的提交哈希>
- 执行配置命令,让Git自动识别忽略列表:
git config blame.ignoreRevsFile .git-blame-ignore-revs - 将
.git-blame-ignore-revs文件提交到仓库后,所有团队成员只需拉取文件并执行一次上述配置命令,后续运行git blame时会自动跳过这两次临时提交的改动,直接显示原作者信息,完全不影响现有提交历史
内容的提问来源于stack exchange,提问作者LetsPlayYahtzee
相关产品推荐
相关产品推荐

