git diff中的^ M是什么意思

Moo*_*her 15 git line-endings

我在分支和上游BitBucket存储库之间差异文件:

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

似乎几乎每个文件都返回相同的差异:

-<U+FEFF>@using Sitecore.Mvc
+@using Sitecore.Mvc^M
Run Code Online (Sandbox Code Playgroud)

^M仅在第一行之后显示的确切含义是什么?当我比较其他文件时也看到此问题。我在Windows Server 2008 R2计算机上。core.autocrlf设置为true。.gitattributes设置为text eol=lf。我的git版本是2.5.1.windows.1。

mel*_*ene 19

^M代表回车。这种差异意味着某些东西从该行的开头删除了Unicode BOM,并在结尾添加了CR。

^符号代表Control,因此^M表示Ctrl+M

为了从中获得实际的ASCII字符代码,您需要使用基本字符并翻转第6位(即与64进行XOR)。对于字母,这意味着减去64。例如^A,字符代码1(因为A为65)。^M是77-64 = 13(因为M是77),对应于ASCII中的回车符。

  • `git config core.whitespace cr-at-eol` 将其隐藏在差异中 (16认同)
  • 如果您在这里是因为 WSL (Ubuntu) 中的 git 显示用回车符更改的每个文件与 Windows 中的 git 或 VS code 显示没有差异,那么您可能需要“git config --global core.autocrlf true”。请参阅:https://github.com/microsoft/WSL/issues/184#issuecomment-209913528 (15认同)
  • 我喜欢这样“授人以渔”的答案。我现在不仅理解了“^M”,而且还理解了我将来可能遇到的任何其他此类控制字符。 (14认同)