windows 中同时使用 vscode 和 wsl git 命令行,每行代码被缀上 ^M 的问题

更新日期: 2025-04-18 阅读次数: 125 字数: 387 分类: Git

现在主力开发环境从 VIM 迁移到了 VSCode 下,但是在 WSL 命令行下使用 git 这个习惯一直改不掉,感觉 VSCode 里使用 git 不太方便。但是同时使用 VSCode 和 wsl git 遇到了一个 ^M 后缀的问题。

复现步骤

Windows 系统上,打开 vscode 编辑一个文件 a.md,在不关闭这个文件的情况下。在 wsl Ubuntu 下使用 git status 命令,会发现文件中的每行被加上了 ^M 后缀。

> git status
On branch main
Changes not staged for commit:
        modified:   a.md

git diff

会看到,除了最后一行,每行被加上了 ^M 后缀。

> git diff
--- a/a.md
+++ b/a.md
-hello
+hello^M
 world

^M 是什么

^M 代表的是回车符 CR,也就是 \r。

  • 在 Unix 系统中,换行符是 LF(\n)
  • 而 Windows 默认使用 CRLF(\r\n)

不同系统中的默认 autocrlf 配置

Windows 下返回 true

C:\Users\Lenovo>git config core.autocrlf
true

WSL Ubuntu Linux 下无返回

> git config core.autocrlf

返回值及含义

  • true 检出时自动转换 LF → CRLF,提交时转换 CRLF → LF(适合 Windows)
  • input 提交时转换 CRLF → LF,但检出时不转换(适合跨平台协作)
  • false 禁用自动换行符转换(可能导致混合换行符问题)
  • 无输出 未配置此选项,Git 默认不自动处理换行符

如何规避

关闭 vscode 时,使用 git status 就不会出现这个问题。

说明 ^M 是 VSCode 自动实时给加上的。

结论

两方都对,不需要配置。

避免同时使用就行了,使用 vscode terminal 中的 git 命令就行。

微信关注我哦 👍

大象工具微信公众号

我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式