必须开启show all branches才能显示完整分支拓扑,否则默认只渲染当前分支直系祖先;还需勾选show merge commits、执行git fetch获取远程分支,并使用--simplify-by-decoration参数确保关键指针可见。

VSCode 查看 Git 历史不是“太难”,而是默认不加载关键信息——没开 Show Merge Commits、没启 Show All Branches、没执行 git fetch,图形就只剩一条线。
Git Graph 打开后只有一条直线?必须开 Show All Branches
默认视图只渲染当前分支及其直系祖先,已合并的 feature/* 分支不会出现,看起来像“提交丢失”或“合并没生效”。这不是插件故障,是 Git 引用过滤行为。
- 点右上角齿轮图标 → 勾选
Show All Branches - 顶部 Filter 框确认显示的是
All Branches,不是Current Branch - 点击
Refresh(不是等 Auto Refresh) - 若仍不显示,检查是否已运行
git fetch origin—— 远程分支不会自动拉取
合并节点是直线不是菱形?先确认是不是 fast-forward
Git Graph 严格还原 Git DAG:git merge --no-ff 才生成带两个 parent 的 merge commit,才会画成菱形;git merge 默认 fast-forward 只移动指针,图里就是直线。
- 右键该提交 →
View Commit Details,看Parent(s)行:只有一个哈希是 ff,两个才是真 merge - 若确认用了
--no-ff却还是直线,检查是否漏开了Show All Branches或被 Filter 锁定范围 -
Show Merge Commits(齿轮菜单里)必须勾选,否则 merge 节点直接被隐藏
点提交后 diff 为空或跳错路径?别怪 UI,查 Git 状态
VSCode diff 渲染依赖 Git 元数据与工作区路径严格对齐。常见失效场景和绕过方式:
- 文件被重命名/删除 → VSCode 尝试按旧路径加载失败;用右键 →
Compare with Current Branch更稳 - 路径含空格或 Unicode 字符 → 终端执行
git show <sha> -- "path/with space.js"</sha>查原始 diff - 二进制文件(图片/PDF)或 >50MB 文本 → VSCode 主动跳过 diff 渲染,属安全限制,非配置错误
- 工作区通过符号链接打开 → VSCode 拒绝读取
.git,改用真实路径重开文件夹
大仓库卡顿、图谱杂乱?关 Auto Refresh,加参数限深
超过 10k 提交的仓库,全量 --all 会把所有中间 merge 都画出来,分支线缠绕且渲染慢。VSCode 不靠 Max Commits to Load 控制拓扑,真正起效的是命令行参数。
- 设置里关闭
git-graph.autoRefresh - 在 Git Graph 顶部输入框手动输入:
--all --simplify-by-decoration --date-order -n 200 -
--simplify-by-decoration是关键:只保留有 branch/tag/head 标记的提交,跳过无意义的中间节点 - 不要依赖图形界面右上角的 “Load More”,它不精简拓扑,只追加数量
真正容易被忽略的,是 --simplify-by-decoration 这个参数——它不改变 Git 逻辑,但决定了图里能不能看到 origin/main、HEAD、tag 等关键指针。没它,分支线连得再密,也可能是“假连接”。











