Git - 在已提交的文件中更改行结尾

时间:2012-09-01 11:43:24

标签: git

我读了.gitattributes并告诉git不要更改几个文件的行结尾。问题是,他们已经承诺了。愚蠢的聪明的git现在不想撤消它所做的事情。删除和重新添加文件没有帮助(它可以优化更改)。现在,每当我从回购中提取时,我都必须手动重新复制这些文件。

我该怎么办?将此报告为错误并等待修复?以某种方式删除提交对象以强制git重新创建它们?后者似乎很难/危险。

编辑:我发现这个nice guide on GitHub用于从回购中完全删除文件。问题是,我真的不想将它从整个历史中删除。我必须,或者我可以只为最后一次提交吗?如果我为最后一次提交做了,Git会重新找到并再次优化吗?

2 个答案:

答案 0 :(得分:1)

我会重新解释这个问题,因为我已经深入挖掘了(我的原始描述略有偏差),并解释了解决方法。

我的Windows机器上的问题文件有LF结尾。当我将它们推送到beanstalkapp.com时,它们保留了它们的LF结尾(无论Git设置如何都是预期的)。当我在另一台Windows机器上拉它们时,它们变成了CRLF。我添加了.gitattributes将它们视为二进制文件,但是在另一台Win机器上拉这个文件却没有把它作为LF检查出来。

其他Win上的Git应该在检测到新的.gitattributes时正确地重新排它们,但没有。此外,在一次提交中删除,在下一次提交时重新添加它们,但是只需一步推送它们并在一步中拉它们也不起作用。

我必须将提交全部删除。然后当他们重新添加时我不得不再次拉。这让其他Win机器正确检查它们。 我没有尝试在另一台Win机器上删除它们并进行重置 - 硬盘,有人建议可能还清除了Git的大脑。

我会在邮件列表中写下拉动.gitattributes应该是什么行为。

答案 1 :(得分:-1)

1)将您的历史记录重置为上次正确的提交(警告:仅当您或其他人未在项目中进行新的更改时才执行此操作)

2)更新.gitattributes以更正值

3)提交

4)推送--force属性。