Git - 修改已提交文件中的换行符

5
我查阅了.gitattributes并告诉git不要为某些文件更改行结束符,但问题是它们已经提交了。聪明却傻的Git现在不想撤销它所做的操作。删除和重新添加文件无济于事(它会优化掉这个更改)。现在,每次我从库中拉取时,我必须手动重新复制这些文件。
我该怎么办?报告此问题并等待修复?某种方式删除提交对象以强制git重新创建它们?后一种方法似乎困难/危险。
编辑:我在GitHub上找到了一个很好的指南,可以完全从库中删除文件。问题是,我真的不想将其从整个历史记录中删除。我必须这样做吗,还是只能在最后一个提交中这样做?如果我对最后一个提交这样做,Git会重新查找和优化吗?
2个回答

1

我现在深入挖掘后会重新解释问题(我的原始描述略有偏差),并解释解决方法。

我的Windows机器上的问题文件具有LF结尾。当我将它们推送到beanstalkapp.com时,它们保留了它们的LF结尾(无论Git设置如何都应该如此)。当我在另一台Windows机器上拉取它们时,它们被更改为CRLF。我添加了.gitattributes以将它们视为二进制文件,但在另一个Win机器上拉取此文件时,它们没有被检出为LF。

当Git在其他Win上检测到新的.gitattributes时,应该重新正确检出它们,但它没有这样做。此外,在一个提交中删除它们,下一个提交中重新添加它们,但在1步中推送它们并在1步中拉取它们也不起作用。

我必须拉取删除它们的提交。然后当它们重新添加时,我必须再次拉取。这使得其他Win机器可以正确检出它们。 我没有尝试在其他Win机器上删除它们并进行reset --hard,有人建议这也可能清除Git的脑子。

我将写信给邮件列表,询问拉取.gitattributes的行为应该是什么。


邮件列表查询的结果是什么? - Arafangion
2022年7月2日。曾经遇到过同样的问题。Git远程包含带有CLRF的文件。本地将其更改为LR,git status显示文件已更改。然而,Git忽略了“git add”命令。Git太烂了。 - lol lol

-1

1) 将您的历史记录重置为最后一个正确的提交(注意: 只有在您或其他人没有在项目中进行新更改时才这样做)

2) 更新.gitattributes以纠正值

3) 提交

4) 使用--force属性进行推送。


没有最后一个正确的提交。这些文件从一开始就是不正确的,并且在之前添加了许多(有用的)提交。但是“重置”是什么意思?这会删除对象吗?因为我希望git只会重新查找那些对象并使用它们。 - Aleksandr Dubinsky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接