在 Windows 的 PowerShell / CMD 里执行 git log,中文提交信息变成一堆 <E6><89><93> 十六进制转义,或者变成「涓枃」这样的怪字——这两个现象的根因不同,解法也不同。本文按输出链路逐环排查,一次配好不再复发。

截图

先分清楚:你遇到的是哪种乱码

形态 A:十六进制转义,中文显示为 <E6><89><93> 这种尖括号字节码:

3467ca7 <E6><89><93><E5><8C><85><E8><84><9A><E6><9C><AC>...

形态 B:字符错乱,中文显示为「涓枃」「鎻愪氦」这种能显示但完全对不上的字:

3467ca7 鎵撳寘鑴氭湰榛樿鐗堟湰鍙峰悓姝ヤ负 1.2.0

形态 A 是 pager(less)把 UTF-8 字节当不可打印字符转义了;形态 B 是 控制台代码页用 GBK 误读了 UTF-8 输出。两个问题的修复点不一样,所以网上抄一条命令经常不管用。

根因:Git 输出链路的三个环节

Git 内部固定用 UTF-8 存储提交信息。从存储到你眼睛,中间经过三环:

  1. Git 自身配置:core.quotepath(路径转义)、i18n.logoutputencoding(日志输出编码)
  2. Pager(less):git log 默认走 less 分页,less 按 LESSCHARSET 判断字符集,不认识就转义成 <XX>
  3. 控制台代码页:Windows 中文系统默认 GBK(936),UTF-8 输出会被按 GBK 解码

任何一环断了都会乱码。下面按顺序修。

第一步:Git 配置三件套

git config --global core.quotepath false
git config --global i18n.commitencoding utf-8
git config --global i18n.logoutputencoding utf-8
  • core.quotepath false:中文文件名不再转义(git status 里的 "\346\226\207\344\273\266.txt" 变回正常文件名)
  • i18n.commitencoding utf-8:声明提交信息的编码(写入时不再转码)
  • i18n.logoutputencoding utf-8:日志输出编码固定 UTF-8

第二步:修 pager(形态 A 的直接元凶)

git log 默认通过 less 输出,less 不知道字符集就把非 ASCII 字节显示成 <E6> 这种转义。设置环境变量:

# 当前会话立即生效
$env:LESSCHARSET = "utf-8"

# 永久写入用户环境变量(推荐,重开终端生效)
setx LESSCHARSET utf-8

设完再跑 git log --oneline,形态 A 的转义应该直接消失。如果懒得配 pager,也可以临时绕过:git --no-pager log --oneline 直接输出到终端,不经过 less。

第三步:控制台代码页切 UTF-8(形态 B 的修法)

chcp 65001

65001 是 UTF-8 的代码页编号。PowerShell 下还可以同步设置输出编码,避免管道场景再次乱码:

[Console]::OutputEncoding = [System.Text.Encoding]::UTF8

注意 chcp 65001 只对当前窗口生效。想永久生效,可以在「区域设置 → 管理 → 更改系统区域设置」勾选 Beta 版:使用 Unicode UTF-8 提供全球语言支持——但这会让一些老国产软件乱码,开发机上自行权衡。

第四步(推荐):换个现代终端

Windows Terminal、VS Code 终端、IDEA 内置终端默认就是 UTF-8,配好第一、二步后基本不会再遇到乱码。老的 conhost(蓝底 PowerShell 窗口)对 UTF-8 支持最差,能换就换。

验证与残留坑

配完后验证:

git log --oneline          # 提交信息中文正常
git status                 # 中文文件名正常
git show <commit>          # diff 里的中文内容正常

两个残留坑提醒:

  • 老仓库提交本身是 GBK 编码(早期 SVN 迁移或老 Windows 项目):新配置下老提交会反向乱码,此时读取端临时设 git config i18n.logoutputencoding gbk 查看,或联系仓库维护者统一转码
  • 脚本里解析 git 输出:先 git --no-pager 并固定编码,避免 CI 环境 pager 行为不一致

常用的 Git 配置与日志命令可以收藏速查表对照使用:Git 命令速查、Git 日志与提交速查。日常在 Windows 做排查的话,也可以试试我们的 Windows 本地工具箱,端口占用、文件定位等工具离线可用。