Git Graph 是 VS Code 中零配置的分支可视化工具,直接渲染 git log --all --graph 命令结果;通过左侧图标或快捷键打开,显示彩色分支图即表示正常工作;支持右键提交/分支/标签执行创建、切换、合并等操作;拖拽合并需当前分支为检出分支且无冲突;可通过分支筛选和 glob 模式管理复杂分支视图,并需手动刷新远程状态。

Git Graph 是目前 VS Code 中分支可视化管理最直接、零学习成本的工具,不需要额外配置就能看懂合并点、分叉线、提交时序——它不是“增强版 Git”,而是把 git log --all --graph --oneline --simplify-by-decoration 的结果真正画了出来。
怎么快速打开并确认 Git Graph 正在工作
安装插件后,点击 VS Code 左侧活动栏的分支图标(Git Graph),或用快捷键 Ctrl+Shift+P(Windows/Linux) / Cmd+Shift+P(macOS)输入 “Git Graph: Show Git Graph” 打开视图。如果看到一堆带颜色线条的节点和分支名(如 main、feature/login),说明已正常加载仓库历史。
常见卡顿或空白原因:
- 项目根目录下没有
.git文件夹(未初始化或不在 Git 仓库内) - 当前工作区是多文件夹工作区(multi-root workspace),但部分文件夹不是 Git 仓库 —— Git Graph 默认只显示第一个有效仓库
- 仓库提交历史过大(>10k 提交),可临时在设置中启用
git-graph.maxCommitsToLoad限制加载数量
右键操作哪些节点能直接完成分支任务
Git Graph 的核心效率来自右键菜单,不同目标触发不同动作,不是所有节点都支持全部操作:
- 右键 提交节点(圆形色块):可
Create Branch(从该提交切新分支)、Cherry-Pick、Reset Branch to Here(软重置当前分支指针) - 右键 本地分支名(如
refs/heads/main):可Checkout(切换)、Merge Into Current Branch(合并进当前分支)、Delete Branch(仅删除本地) - 右键 远程分支(如
refs/remotes/origin/develop):可Merge Into Current Branch或Track Branch(建立本地跟踪分支) - 右键 标签(
v1.2.0):可Create Branch from Tag,适合从发布版本拉修复分支
注意:Merge Into Current Branch 不会自动 git push,合并后仍需手动同步到远程。
为什么拖拽分支线合并有时不生效
Git Graph 支持拖拽分支名到另一个分支上触发合并,但这个操作有隐含前提:
- 目标分支必须是当前检出分支(即你正在工作的分支),否则拖拽无响应
- 被拖拽的分支不能是当前分支自身(比如把
main拖到main上) - 如果存在合并冲突,Git Graph 不会弹窗提示,而是静默失败 —— 此时要立刻看源代码管理视图(
Ctrl+Shift+G)里是否出现冲突文件列表 - 拖拽合并等价于执行
git merge <source-branch>,不支持--no-ff或--squash参数,如需精细控制,仍得用命令行或 GitLens
建议:日常小范围合并用拖拽,涉及保护分支(如 main)或需审查流程时,改用右键 Merge Into Current Branch 并配合 VS Code 内置的 Merge Editor 处理冲突。
分支筛选和自定义显示避免信息过载
当团队分支数超过 20+,图形界面会迅速变乱。Git Graph 提供两种轻量级过滤方式:
- 顶部工具栏的
Branches下拉框:勾选只显示关注的分支(如只留main、develop、feature/*) - 在
settings.json中配置git-graph.customBranchGlobPatterns,例如:
{
"git-graph.customBranchGlobPatterns": [
{ "name": "主干", "glob": "heads/(main|master|develop)" },
{ "name": "功能分支", "glob": "heads/feature/**" }
]
}
保存后,左侧分支面板会按分组折叠,点击分组名才展开对应分支 —— 这比手动滚动查找快得多。但注意:glob 模式不支持正则,只认 ** 和 * 通配符,写错会导致整个分组消失。
真正容易被忽略的是:Git Graph 不会自动刷新远程分支状态(比如别人推了新提交),需要手动点击右上角的 Refresh 按钮,或设置 git-graph.refreshPeriodInMinutes 启用轮询。别指望它像网页一样“实时”。


















