在“git diff”命令中,^M是什么意思?

87

我正在比对 fork 的和 upstream Bitbucket 存储库之间的文件:

$ git diff origin/branchA..upstream/branchB -- some/file/path.xyz

好像它返回的几乎每个文件都是相同的差异:

-<U+FEFF>@using Sitecore.Mvc
+@using Sitecore.Mvc^M
^M是什么意思?在第一行之后才出现。我在比较其他文件时也遇到了这个问题。我正在使用Windows Server 2008 R2机器。 core.autocrlf设置为true。 .gitattributes设置为text eol = lf。Git版本为2.5.1.windows.1。
1个回答

153

^M表示回车符(Carriage return)。这段差异意味着有东西从行首删除了一个Unicode BOM,并在行尾添加了一个CR。

^符号代表控制字符,所以^M代表Ctrl+M

要将其转换为实际的ASCII字符代码,需要获取基础字符并翻转第6位(即与64进行异或运算)。对于字母而言,这意味着减去64。例如,^A是字符代码1(因为A是65)。^M是77-64=13(因为M是77),这对应于ASCII中的回车符。


48
我喜欢这样的回答,它能“授人以鱼不如授人以渔”。我不仅理解了 ^M 这个字符,还可以更好地理解将来可能遇到的其他控制字符。 - gilly3
15
git config core.whitespace cr-at-eol添加到配置中以在差异显示中隐藏它。 - SwiftArchitect
15
如果您在使用WSL(Ubuntu)的Git时发现每个更改的文件都带有回车符,但Windows或VS Code中的Git则没有显示任何差异,那么您可能需要使用git config --global core.autocrlf true命令。详情请参见:https://github.com/microsoft/WSL/issues/184#issuecomment-209913528 - Mecha Wailmer

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