git diff显示^M,颜色为真

git diff显示^M,颜色为真,git,vim,Git,Vim,我修改了我的.gitconfig,这样在执行git diff时就有了一些颜色: $ cat .gitconfig [color] ui = true 我在ubuntu机器上工作,我用VIM编辑了一些代码。编辑文件后,执行git diff,一次带ui=true,一次不带ui=true 问题:在第一种情况下,我有^M个字符和编辑行的结尾。但是,当打开color.ui或使用vim、cat、更多查看时,我看不到这些。。在被操纵的文件上。这可能是一个编码问题。“git diff”命令正在执行Vim,认

我修改了我的
.gitconfig
,这样在执行
git diff
时就有了一些颜色:

$ cat .gitconfig 
[color]
ui = true
我在ubuntu机器上工作,我用VIM编辑了一些代码。编辑文件后,执行
git diff
,一次带
ui=true,一次不带
ui=true


问题:在第一种情况下,我有
^M个
字符和编辑行的结尾。但是,当打开
color.ui
或使用
vim
cat
更多查看时,我看不到这些。。在被操纵的文件上。

这可能是一个编码问题。“git diff”命令正在执行Vim,认为文件格式是Dos

当您使用任何其他命令时,它会被正确识别为Unix文件

你能试试吗
:设置fileformat=unix
在你的git diff窗口中


我不确定这是否是根本原因,因为我看不到带有
ui
选项的链接。

请查看Github出色的“处理行尾”页面:


您可能需要设置core.autocrlf,然后重新规范化您的存储库。

通过将
core.whitespace
设置为
cr-at-eol

将行尾的回车符视为行终止符的一部分

可以按如下方式将其添加到每个项目或全局git配置文件中:

[core]
    whitespace = cr-at-eol
这解决了由于另一个非行结束更改而在差异中的行的末尾隐藏^M的问题。这样做的目的不是要忽略更改,因为更改的唯一区别是行的结尾。我在windows上使用的是
core.autocrlf
=
true
,因此预计行尾不匹配

我唯一要提醒的是,我不知道这是否会影响git是否会在EOL中标记出您可能想要提交的真正更改,但如果autocrlf=true,则可能永远不会出现这种情况


另一种更具针对性(但稍微有点黑客性)的修复方法已被描述。

您对“git diff window”的确切含义是什么?我只是在shell中做这件事,没有任何特定的vim窗口。啊,对不起,我以为你在使用“vim diff”作为git的diff工具。因此,如果您使用Vim打开文件,是否可以从
:set fileformat?
给出响应。有关详细信息,请参阅。
fileformat=dos
。当切换到
unix
时,
^M
消失。伟大的我有一些副作用,不知怎么的,我所有的代码看起来都变了,但基本上这就是我问题的解决方案。谢谢可能是某个编辑器或签入操作转换了文件的结束行。尝试找出根本原因,因为您不想花时间转换文件格式。检查git autocrlf设置是否未设置。在您的帖子之后,这对我来说很有效:
git config--global core.whitespace cr at eol
。我想可以先执行git config--global core.whitespace
来查看它的设置。