提问人:sds 提问时间:8/23/2023 更新时间:9/16/2023 访问量:64
git:追溯修复 CRLF 混乱
git: fix CRLF mess retroactively
问:
我错误地提交了一些带有 CRLF 行结尾的文件。
现在我在本地设置并修复了文件(在编辑器中)。core.autocrlf = false
有没有办法解决这个问题(例如,使用 &c 的某种组合),以便 CRLF 从历史记录中永久消失?rebase -i
答:
1赞
VonC
9/10/2023
#1
我提到过:
git add --renormalize .
,这应该有助于应用任何 / 更改。.gitattributes
git config
git ls-files --eol
,它有助于列出带有 EOL 的文件,以便进行诊断。
使用 git rebase -x
,您可以调用一个脚本,以确保应用本地 Git 配置。git add --renormalize .
Guildenstern 还在 git test fix
的评论中指出
该子命令可以运行格式化程序或 linter 等命令,并将其生成的更改应用于每个提供的提交。
例如:。git test fix
git test fix --exec 'cargo fmt --all'
防止合并冲突
手动应用格式化程序或 linter 更改可能很困难(例如),因为它必然会重构固定提交的后代。
这通常会导致合并冲突,这些冲突将通过格式化或linting下一次提交来解决。(作为一种解决方法,有些人尝试以反向拓扑顺序修复提交,以最大程度地减少合并冲突的可能性。git rebase --exec
git test fix
从不产生合并冲突,因为它通过直接替换树 OID 来单独修复每个提交,并使后代提交保持不变。(您可以通过使用选项调用 git amend 来手动执行相同的操作)--reparent
在此处查看实际操作。git test fix
评论
rebase -i
dos2unix <filename>