git log --graph 输出乱码或不显示分支线的根本原因是终端未启用 utf-8 编码或 git 未配置图形化字符集,需检查 locale、设置 lc_all、配置终端字体与编码,并搭配 --oneline、--all、--decorate 等参数才能正确显示分支结构。

git log --graph 输出乱码或不显示分支线
终端不支持 ASCII 图形渲染时,git log --graph 会输出一堆符号(如 |、/、\)错位,甚至显示成方块或问号。根本原因是终端未启用 UTF-8 编码,或 Git 没配好图形化字符集。
- 先确认终端编码:
locale | grep UTF,确保输出含UTF-8 - 临时修复:运行
export LC_ALL=en_US.UTF-8(Linux/macOS) - 永久生效:把该行加到
~/.bashrc或~/.zshrc - Windows 用户用 Git Bash 时,右键窗口 → Options → Text → Locale 设为
en_US,Charset 设为UTF-8
git log --graph 常用组合参数避坑
--graph 单独用几乎没用,必须搭配提交信息展示参数,否则只画线不显示 commit 内容。最易踩的坑是漏掉 --oneline 或 --all,导致分支线断开、看不到合并点。
- 基础可用命令:
git log --graph --oneline --all - 想看作者和时间:
git log --graph --pretty=format:"%h %an %ar - %s" --all - 避免日志过长卡顿:加
-n 20限制条数,如git log --graph --oneline -n 20 -
--all必须带上,否则只显示当前分支,其他分支的线直接消失
Windows CMD/PowerShell 下 git log --graph 显示异常
原生命令提示符(CMD)和旧版 PowerShell 默认字体不支持等宽+Unicode 渲染,--graph 的竖线、拐角符号会错位甚至重叠。这不是 Git 问题,是终端环境限制。
- 不要在 CMD 里硬调
--graph,改用git log --oneline --all --decorate看分支名和 HEAD 标记 - PowerShell 用户可执行:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser,再安装oh-my-posh或换用 Windows Terminal - 最省事方案:直接用
gitk(Git 自带 GUI)或 VS Code 内置的 Git 图形视图
用 git log --graph 查合并提交但看不到 merge 分支名
--graph 默认只画线,不标出 merge 来源分支。即使 commit 是 merge,日志里也只显示“Merge branch 'dev'”,但图形上无法区分哪条线是 dev、哪条是 main。
- 加
--decorate可显示分支指针位置:git log --graph --oneline --all --decorate - 想高亮 merge 提交本身:用
--simplify-by-decoration过滤掉非分支 tip 的提交 - 注意:
--merges参数只会筛选出 merge 类型提交,但会丢失图形结构,慎用
图形化日志本质是 ASCII 艺术,依赖终端能力、字体、Git 配置三者配合。调参前先确认你真需要终端里的图,还是直接用 git log --oneline --all --decorate + git show-branch 更稳。











