You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

换行符改为CR后,如何恢复Git文件的逐行Blame历史?

恢复换行符损坏文件的Git Blame作者信息

操作步骤

1. 定位正常提交并创建修复分支

找到换行符切换为CR前的最后一个正常提交(记为<good-commit>),基于该提交创建新分支用于修复:

git checkout -b fix-line-endings <good-commit>

2. 遍历损坏后的提交,逐个提取并应用真实变更

首先列出从第一个损坏提交(记为<bad-start-commit>)到当前主分支的所有提交,按时间正序排列:

git log --reverse <bad-start-commit>..main > commit-list.txt

然后逐个处理列表中的每个提交(以下操作针对单个目标文件filename):

  1. 导出当前提交中损坏的CR格式文件,转换为LF格式:
    git show <commit-hash>:filename > temp_cr.txt
    tr '\r' '\n' < temp_cr.txt > temp_lf.txt
    
  2. 对比当前分支的LF格式文件与转换后的文件,生成真实变更补丁:
    diff -u filename temp_lf.txt > fix.patch
    
  3. 若补丁存在有效变更,应用补丁到当前分支:
    patch -p0 < fix.patch
    rm temp_cr.txt temp_lf.txt fix.patch
    
  4. 使用原提交的作者信息提交变更:
    git add filename
    git commit --author="$(git show --format="%an <%ae>" <commit-hash>)" --date="$(git show --format="%ad" <commit-hash>)" -m "$(git show --format="%s" <commit-hash>)"
    

3. 验证与收尾

完成所有提交处理后,用以下命令验证Blame信息是否恢复:

git blame filename

确认无误后,可将修复分支合并回主分支;若需替换原分支历史,需谨慎执行强制推送(需提前告知团队成员)。

注意事项

  • 若多个文件出现换行符损坏,需调整步骤批量处理每个文件
  • Windows环境建议使用Git Bash或WSL执行上述命令,确保tr/diff/patch工具可用
  • 操作前务必备份原分支,避免意外丢失历史

内容的提问来源于stack exchange,提问作者Serge

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 08:07:17