git:retroactively修复CRLF mess

yfwxisqw  于 2023-09-29  发布在  Git
关注(0)|答案(1)|浏览(109)

我错误地提交了一些以CRLF行结尾的文件。
现在我设置了core.autocrlf = false并在本地修复了这些文件(在编辑器中)。
有没有一种方法可以解决这个问题(例如,使用rebase -i和c的某种组合),以便CRLF从历史中永久地完全消失?

j8ag8udp

j8ag8udp1#

我提到:

使用git rebase -x,您可以调用git add --renormalize .脚本,以确保应用本地Git配置。
Guildenstern还在git test fix的评论中指出,
git test fix子命令可以运行诸如formatter或linter之类的命令,并将其产生的更改应用于每个提供的提交。
举例来说:git test fix --exec 'cargo fmt --all'

防止合并冲突

手动应用格式化程序或linter更改可能很困难(例如使用git rebase --exec),因为它必须重新确定固定提交的后代的基础。
这通常会导致合并冲突,这些冲突将通过格式化或linting下一次提交来解决。(作为一种变通方法,有些人尝试以反向拓扑顺序修复提交,以最大限度地减少合并冲突的机会。
git test fix永远不会产生合并冲突,因为它通过直接替换树OID来独立修复每个提交,并保持后代提交不变。(你可以手动调用git amend并使用--reparent选项来做同样的事情)
参见git test fixin action here

相关问题