GitBoard — Git 可视化提交图 / Git Commit Graph for VS Code
简体中文 | English
提交图 · 工作副本提交 · 三栏合并 · 拉取摘要 · 文件历史——日常 Git 操作一站搞定,全程不离开 VS Code。
反馈与联系
欢迎提出 Issue 与新需求,也欢迎反馈使用中遇到的任何问题——每一条反馈都会认真对待:
🐛 Bug reports & feature requests are always welcome at GitHub Issues · 📧 Contact the author: emonzhang3438@outlook.com

中文文档
简介
GitBoard 是一个 VS Code 桌面插件,以图形化提交历史为核心,把日常 Git 操作搬进同一个面板:浏览彩色拓扑提交图、查看差异、Fetch / Pull / Push、重置与切换分支,用 SourceTree 式的工作副本视图提交代码(可由 GitHub Copilot 生成提交信息),在三栏合并器里解决冲突,用拉取摘要一眼看清"谁改了什么",还能在文件历史页里跨移动跟随文件的完整历史。
针对大仓库做了分页加载、虚拟滚动与分层渲染;启动不等待 Git 探测——界面先行渲染,仓库扫描与提交历史后台加载,全程有加载反馈。
核心特性一览:
- 🎨 GitHub 风彩色拓扑提交图(可切换圆角 / 直角风格),HEAD / 分支 / 远程 / 标签徽标;
- ✅ SourceTree 式工作副本提交——勾选即暂存,Copilot AI 一键生成提交信息;
- 🧠 操作报错 AI 诊断与一键修复——失败通知一步直达 Copilot 三段式分析,修复命令白名单分级安全执行;
- 🔀 IDEA / Beyond Compare 式三栏合并冲突解决器;
- 📥 Pull / Fetch 变更摘要——作者 → 目录 → 文件三层分组;
- 📁 文件历史页——移动 / 重命名文件夹后历史完整跟随,任意两版本比对;
- ⚡ 大仓库友好——分页、虚拟滚动、后台自动获取(SourceTree 式)。
目录
功能特性 · 安装 · 快速上手 · 功能使用详解 · 快捷键 · 常用设置 · 从源码开发 · 常见问题 · 更新日志
功能特性
| 特性 |
说明 |
| 图形化提交历史 |
彩色拓扑图呈现分支、合并、交叉与多根仓库;HEAD / 本地分支 / 远程分支 / 标签徽标。v0.14.6 起默认 GitHub 风格:细线 + 低饱和配色 + 圆弧转弯,普通提交为实心圆点、合并提交为空心环、HEAD 以背景色粗边强调(不再使用红环);gitboard.graphStyle 可切换 curved(短半径圆角)或 angular(直角折线) |
| 提交详情 |
完整 SHA(一键复制)、作者/提交者、完整提交注释、变更文件列表(状态与 ± 行数,按目录分组、组内只显示文件名);文件 Ctrl/⌘ 累积多选、Shift 范围多选,文件头 ↗ 按钮或右键一次在编辑器打开多个文件;面板高度按百分比记忆,不同尺寸屏幕相对高度一致;diff 工具栏「在 VS Code 中打开」按钮直接打开工作区文件 |
| 差异对比 |
面板内联 diff(紧凑模式只看增删行,⋯ 折叠无差异段落)+ VS Code 内置差异编辑器(语法高亮);合并提交按第一父口径显示 |
| 文件操作 |
打开工作区文件、查看任意历史版本(只读)、在系统文件管理器中定位(已删除文件自动回退父目录)、复制路径;Windows 长路径(>259 字符)自动降级定位到最深可用祖先目录并选中 |
| GUI Git 操作 |
Fetch(--all --prune)、Pull(merge/rebase/ff-only)、Push(含设置上游)、重置到提交(soft/mixed/hard,hard 需红色确认)、切换分支(检出选择器子序列模糊搜索,远程分支内联命名一步检出)、分离 HEAD;SourceTree 式后台自动获取(默认 10 分钟,可配可关);操作进度行实时显示 git 明细与耗时、网络操作可取消 |
| 工作副本提交 |
已暂存/未暂存分组,勾选即暂存、取消即取消暂存;文件列表按目录分组、文件名过长完整换行;一键移除 ~$ Office 临时文件;单文件 HEAD↔工作副本差异;提交 / 提交并推送 / 修订上次提交 / 暂存全部并提交;最近 8 条信息复用;丢弃(双重确认);删除文件(转未暂存 D);行内悬浮按钮(新选项卡打开 / 复制文件名 / 复制路径 / 删除);文件状态手动刷新按钮;草稿按仓库持久化;提交后推送询问条仅在无其他推送入口时出现 |
| AI 提交信息 |
GitHub Copilot 生成:流式填充、可停止/重生成/选模型;学习近 10 条提交的风格与语言;自动遵循 .copilot/、.github/copilot-instructions.md 等工程指示文件;复用 VS Code 当前登录账号,零凭证。大批量提交加固:统计与差异封顶截断、60s 无响应自动停止;差异不可用时自动降级为文件名 + 目录结构推断,并如实标注 |
| AI 错误诊断 |
操作失败弹常驻错误通知(重试 + 折叠 git 输出);Copilot 可用时附「AI 分析」——三段式流式诊断(原因 / 解决步骤含可执行 git 命令 / 预防),URL 凭证自动脱敏后才发送;修复命令经本地白名单独立分级 run/confirm/copy,危险命令逐条红色确认,执行由宿主按索引重校验防篡改(v0.22.0) |
| 合并与冲突解决 |
IDEA / Beyond Compare 式三栏合并器:我的版本 – 合并版本(最终保存的就是它,可编辑)– 他人版本;块级按钮(用我的/用他人/两个都要/都不要)+ 左右栏 «» 一键采纳 + 行内编辑,全程不显示 git 冲突标记,右缘冲突分布导航条;pull/提交遇冲突自动引导横幅;push 被拒引导"拉取并推送";二进制冲突二选一 + 系统程序预览;一方删除场景;超限文件(>16000 行/2MB)显式警告;随时中止还原现场;全部解决后弹确认完成合并(rebase 语义自动反转);解决进度落盘,重开无损 |
| Pull/Fetch 摘要 |
Pull 合并完成后弹窗展示纯净变更摘要(排除合并等操作提交;fetch 静默更新分支 ↓n 徽标与提交图,不弹摘要):作者 → 目录 → 文件 三层分组;文件行带工作区大小与修改时间、行尾按钮一键打开或定位;不在工作区的文件(已被后续提交删除)按钮自动禁用并提示;同作者同文件多提交合并 ×N;重命名显示 旧名 → 新名;中文路径无八进制转义;gitboard.pullFetchSummary 开关,默认开启 |
| 文件历史页 |
工具栏第四视图「🗂 文件」:左区资源管理器(文件夹视图/详细信息双视图、Win11 式地址栏、多选 + 删除/移动/重命名独立按钮)+ 右区跨移动/重命名跟随的完整提交历史(路径链与时期徽标、里程碑行、就地展开详情、只读打开历史版本、勾选任意两版比对)。详见第 11 节 |
| 筛选 |
分支/远程/标签过滤 + 作者多选下拉 + 时间段(可叠加,条件按仓库记忆) |
| 工程切换 |
左侧栏「工程」区:保存常用工程文件夹(自定义名称),双击当前窗口切换、右键新窗口打开/重命名/移除 |
| 大仓库性能 |
分页加载(500/页,上限可配)、DOM 虚拟滚动 + Canvas 只绘视口、.git 监视防抖自动刷新 |
| 界面 |
跟随 VS Code 明暗主题;侧栏可折叠可调宽(工具栏 «/» 折叠、右缘拖拽调宽 170–460px,状态跨会话记忆);列宽拖拽持久化;中英双语;状态栏当前分支;活动栏图标角标显示未提交改动文件数 |
安装
方式〇:扩展市场(发布后可用)
扩展面板(Ctrl+Shift+X)搜索 GitBoard 安装(ID:EmonZhang3438.gitboard),或命令行:
code --install-extension EmonZhang3438.gitboard
方式一:命令行安装 vsix(推荐)
code --install-extension gitboard-0.25.0.vsix
安装后执行 Ctrl+Shift+P → “开发者:重新加载窗口”(每次覆盖安装新版本后都需要;可对照工具栏右侧版本号确认当前构建已生效)。
方式二:VS Code 界面安装
扩展面板(Ctrl+Shift+X)→ 右上角 ··· → “从 VSIX 安装…” → 选择 gitboard-0.25.0.vsix → 重新加载窗口。
方式三:从源码构建
git clone <本仓库> && cd 09_GitGraph
npm install
npm run package # 产出 gitboard-x.y.z.vsix
快速上手
- 打开任意包含 Git 仓库的文件夹/工作区;
- 点击左侧活动栏的 GitBoard 图标(或
Ctrl+Alt+G,或命令面板执行 GitBoard: 打开提交图)——主界面直接打开;
- 单击提交行查看详情,双击变更文件打开差异编辑器,右键探索各项操作;
- 提交代码:点击工具栏 「▣ 工作副本」(或
Ctrl+Alt+C)→ 勾选要暂存的文件 → 撰写或点 ✨ 由 Copilot 生成提交信息 → Ctrl+Enter 提交。
功能使用详解
1. 界面布局
对照上方总览图的编号:① 工具栏(Fetch/Pull/Push/检出/图形范围切换/刷新/设置/版本号 + 筛选控件);② 左侧栏(工程、仓库、本地分支含 ↑领先 ↓落后 徽标、远程、标签);③ 提交图(彩色走线、节点、ref 徽标);④ 详情概要(SHA、作者、时间、完整注释);⑤ 变更文件列表;⑥ 内联差异。
- 工具栏最左端的分段控件在「⎔ 提交图 ⇄ ☰ 纯提交 ⇄ ▣ 工作副本 ⇄ 🗂 文件」四个视图间一键切换,各视图的状态互相保留;
- 侧栏折叠(v0.14.1):工具栏最左「«」按钮把工程/仓库/分支/远程面板整体收起,图形与提交列表获得全部宽度;折叠后左缘保留 18px 竖把手(»),点击即恢复;折叠状态跨会话记忆;侧栏调宽(v0.23.1):侧栏右缘拖拽手柄实时调宽(170–460px,悬停高亮),宽度跨会话记忆,折叠态手柄自动隐藏;
- 详情面板高度可拖拽、可折叠(按百分比记忆,不同尺寸屏幕相对高度一致),位置可在设置中改为右侧;
- ☰ 纯提交:隐藏合并提交,只列常规提交,左侧为窄圆点时间线图形列(每行一个圆点,HEAD 加红色圆环),列宽固定。

2. 浏览提交图
- GitHub 风走线(v0.14.6 默认):2px 细线、GitHub 低饱和配色(深浅主题各一套)、换轨为两端四分之一圆弧 + 中段短水平、汇入为圆弧拐入;普通节点实心小圆点,合并节点空心环,HEAD 节点背景色粗边强调。偏好旧观感可在设置切换
gitboard.graphStyle:curved(短半径圆角 S 曲线,合并外环 + HEAD 红环)或 angular(直角折线);
- 徽标颜色:绿色=本地分支、紫色=远程分支、黄色=标签、
HEAD → main 表示当前分支;
- 列表滚动到底部自动加载下一页(默认每页 500 条,自动加载上限 20000 条,超出后点“继续加载更多”);
↑ / ↓ 键盘上下移动选中;仓库发生变更(提交/切换分支/fetch)自动防抖刷新;
- 图形范围过滤(v0.21.0):工具栏「全部 / 本地 / 当前」分段控件切换提交图绘制范围——默认「本地」= 本地分支及其上游的提交(远端领先状态照常入图),多分支仓库不再被仅存于远端的分支与标签淹没;
gitboard.graphBranchScope 可改默认值;
- 操作进度行:Fetch/Pull/Push/Refresh 进行时,工具栏下方出现进度条——蓝色填充按 git 进度推进(无百分比阶段为流动动画)、显示 git 明细、实时耗时,网络操作可中途取消;完成绿色闪现后自动收起;
- 窄视口自适应:空间不足时工具栏自动换行、各列按最小宽收缩、列头与内容严格对齐,不再出现元素叠压。
3. 查看提交详情与差异
- 单击提交行:底部面板显示完整 SHA(点击复制)、作者/提交者与邮箱、作者时间/提交时间(
YYYY-MM-DD HH:mm:ss,可改为相对时间)、完整提交注释(标题+正文);
- 单击变更文件:右侧立即显示内联 diff。默认紧凑模式只显示增删行、以
⋯ 行号 ⋯ 折叠无差异段落;点“含上下文”切换为带 3 行上下文的完整视图;
- 双击文件(或点“差异编辑器”按钮):打开 VS Code 内置差异编辑器(父提交版本 ↔ 该提交版本,语法高亮);diff 工具栏「📂 在 VS Code 中打开」直接打开工作区当前文件;
- 多选批量打开:文件列表 Ctrl/⌘ 单击累积、Shift 单击范围选择,点文件头 ↗ 按钮(或右键“打开选中的 N 个文件”)一次打开;工作区已不存在的文件自动跳过并提示;
- 合并提交按第一父提交口径显示差异(与 SourceTree 默认一致)。
4. Git 操作

- Fetch:工具栏 ⟳,默认
--all --prune(可配置);也可在侧栏远程主机/远程分支上右键按单个远程获取;打开视图时可配置自动 fetch;
- Pull / Push:工具栏 ⤓ / ⤒,作用于当前分支的上游配置(
branch.<name>.remote/merge,与原生 git 语义一致);Pull 策略可选 merge / rebase / ff-only;Push 无上游时弹窗引导创建;所有网络操作显示实时进度、可取消,且带停滞防护(低速中断 + 无输出超时,见 gitboard.netStallTimeout);
- 重置到某次提交:提交行右键 →“重置到此提交…”,选择 soft / mixed / hard;工作区有未提交修改且选择 hard 时,必须点击红色确认按钮(防误触);
- 切换分支:双击侧栏分支即检出;工具栏 「⑂ 检出」 按钮或命令面板
GitBoard: 检出分支… 打开模糊搜索选择器(v0.21.0)——分支名子序列匹配 + 命中高亮,本地分支回车即检出,远程分支内联输入本地名一步创建跟踪分支(工具栏分支筛选下拉为同一选择器);提交行右键可“检出此提交”(分离 HEAD);
- 后台自动获取(SourceTree 式):面板打开期间按
gitboard.autoFetchInterval(默认 10 分钟,0=关闭)静默 fetch,拉到新提交后分支 ↓n 徽标与提交图自动更新,不走进度条、不弹摘要。
5. 筛选

工具栏提供三组可叠加的筛选:分支下拉(或单击侧栏分支/远程/标签节点)、作者多选下拉(候选自动来自仓库全部作者,支持搜索过滤/全选/清空)、起止日期选择器(截止日期含当天全天)。有筛选时显示 × 一键清除;筛选无结果时空态会明确提示。条件按仓库分别记忆。
6. 工程切换(v0.11.0)
左侧栏最上方「工程」区,用于在几个常用工程间快速切换 VS Code 工作区:
- 添加:点分区标题右侧 + → 「保存当前工作区」(多根工作区会逐个列出)或「浏览文件夹…」选择任意目录,输入自定义名称(默认取目录名);
- 切换:双击工程即在当前窗口替换为新工程;右键可选「在新窗口打开」「在当前窗口打开」「重命名…」「移除」「复制路径」;
- 当前工作区命中的工程自动高亮;工程列表持久化保存,重启不丢;路径已被移动/删除时打开会明确报错。
7. 个性化
- 列宽:图形/提交说明/作者/SHA 四列表头右缘可拖拽调宽(悬停高亮),自动持久化,重装不丢;时间列自适应剩余空间;
- 主题:全部颜色消费 VS Code 主题变量,明暗自动适配;
- 语言:默认跟随 VS Code 界面语言,可强制指定;工具栏「A / 中 / EN」按钮或命令
GitBoard: 切换界面语言 一键切换,即时生效、无需重载;
- 按钮反馈:Fetch / Pull / Push / 刷新点击后按钮进入繁忙态(蓝色脉冲)、完成时短暂闪绿并 toast 说明结果——无新提交也会明确告知(“远程无新提交” / “已是最新的” / “获取完成:N 个分支引用有更新”)。
8. 工作副本与提交

SourceTree 式提交流程,全程不离开 GitBoard:
- 进入:工具栏「▣ 工作副本」页签(带脏文件数徽标)或
Ctrl+Alt+C;活动栏 GitBoard 图标以角标显示未提交改动文件数(多仓库取总和);
- 暂存:左栏分「已暂存 / 未暂存」两组,勾选即
git add、取消勾选即取消暂存(乐观更新);组内再按目录分组——目录头显示完整路径一次(根目录显示仓库绝对路径),组内行只显示文件名;重命名显示 旧名 → 新名,未跟踪标 U;支持过滤、全部暂存/取消、右键批量操作;
- 刷新文件状态:在编辑器里修改/保存文件不会触发
.git 变化(自动刷新侦听不到),点击文件列表头部的 ⟳ 刷新按钮立即重新执行 git status(图标旋转反馈),角标与徽标随之更新;
- 行内快捷按钮:文件行悬停时行尾浮现四个图标——新选项卡打开(可编辑的真实文件)、复制文件名、复制文件路径、删除文件;右键菜单同步提供;
- ~$ 临时文件清扫:Word/PPT/Excel 的锁定文件存在时,列表头出现扫帚按钮,一键全部删除;
- 看差异:点击任一文件行,右栏显示该文件 HEAD ↔ 工作副本的完整差异(已暂存+未暂存合并,无页签);
‹ › 在更改文件间逐个切换;未跟踪文件显示为全新增;
- 写提交信息:单一多行输入框,首行即摘要(计数 50 提示)、空行后为正文;
🕘 复用最近 8 条提交信息;草稿按仓库自动保存,切视图/重开不丢;
- 提交:
Ctrl+Enter 或「提交 ⏎」按钮;下拉可选 提交并推送 / 修订上次提交(自动载入上次信息并警示)/ 暂存全部并提交;hooks 失败会展示完整输出;未直接推送且工作区仍有残留改动时,提交后显示绿色「推送 / 暂不」询问条;
- AI 生成:点 ✨ 由 GitHub Copilot 基于已暂存差异生成提交信息——流式填入,可
Esc 停止、重新生成、切换模型;语言与风格自动学习近 10 条提交;工程指示文件(.copilot/*.md、.github/copilot-instructions.md、.github/instructions/*.instructions.md)自动遵循;首次使用会请求确认(差异将发送至 Copilot 服务)。大批量提交加固:统计与差异封顶截断、60 秒无响应自动停止、任何失败都解除界面锁定;差异不可用(超大/二进制/超时)时自动降级为文件名 + 目录结构推断并如实标注;
- 丢弃:右键文件 →「丢弃更改…」,红色双重确认后回到 HEAD(未跟踪文件直接删除)。
9. 合并与冲突解决

pull 或提交产生冲突时,自动切到工作副本视图并弹出引导横幅(逐个解决 / 全部以我为准 / 全部以他人为准 / 中止合并)。点击冲突行的「合并…」进入三栏合并器:
- 三栏布局:左=我的版本、中=合并版本(最终保存的就是它,可直接编辑)、右=他人版本;栏头大白话徽标,固定色语义图例常驻;中栏不显示 git 冲突标记,以黄块 + 左缘来源色条(蓝=我的/绿=他人/灰=手动)区分;
- 块级取舍:每个冲突块头部按钮 ⬅ 用我的 / 两个都要 / 用他人 ➡ / 都不要;左右栏行内 « » 一键把整段采纳进中栏;中栏支持行内编辑与“重选来源”;
- 导航:右缘冲突分布导航条(minimap)点击跳转;顶部显示文件名与解决进度;
- 特殊场景:二进制冲突=二选一 + 系统程序预览;一方删除=保留 / 采纳删除(git rm);超大文件(>16000 行 / 2MB)显式警告并降级为整文件三选一;
- 完成与回退:全部解决后弹确认条完成合并(merge→创建合并提交 / rebase→继续变基,
--ours/--theirs 语义自动反转);随时「中止合并」还原现场;
- 进度落盘:解决结果防抖写回文件本身,中途关闭/崩溃重开无损。
10. Pull 变更摘要

Pull 合并完成后弹窗展示纯净变更摘要(排除 Branch/Merge 等操作提交)——回答"哪些人有哪些提交改了哪些文件":
- 作者 → 目录 → 文件 三层分组:作者头(最新提交在前)汇总其提交数/文件数;目录头显示相对路径一次(根目录显示仓库绝对路径);组内只列文件名(完整不截断,过长换行);
- 每行带工作区大小与修改时间,行尾两个按钮:打开文件、在资源管理器中定位(已被同批后续提交删除的文件按钮自动禁用并提示);
- 同作者同文件多提交合并为一行(×N,悬停列出全部提交与说明);重命名显示
旧名 → 新名;不在工作区的文件显示 —;
- 顶部汇总“N 个提交 · M 位作者 · K 个文件”;
gitboard.pullFetchSummary 设置开关,默认开启;
- Fetch 不弹摘要:静默更新分支 ↓n 徽标与提交图(后台自动获取同此语义);网络操作互斥——fetch/pull/push/标签推送任一进行中时,其余网络按钮禁用(未完成合并时 Pull/Push 亦预禁用)。
11. 文件历史页(v0.14.0)

工具栏第四视图「🗂 文件」,移动/重命名文件夹而不丢历史:
左区·资源管理器
- 双视图:「▦ 文件夹视图」平铺网格 / 「☰ 详细信息视图」四列表格(名称/修改日期/类型/大小,每列可拖宽并记忆,目录优先,类型彩色图标);面板宽度可拖拽(280–640px)并记忆;
- Win11 式地址栏:面包屑 ⇄ 编辑态(
Ctrl+L 或点 ✎);支持仓库相对路径(B/A)与绝对路径——粘贴 D:\repo\src 或资源管理器"复制文件地址"的带引号形式均可直达(v0.14.5);输入文件路径则定位选中并在编辑器打开;路径不存在时红框 + 明确提示;
- 多选与操作:Ctrl 累积 / Shift 范围选择;命令条独立按钮 🗑 删除(git rm,待提交前可恢复)/ ✂ 移动到… / 🗎 重命名(F2)/ ⧉ 复制路径 + 过滤框;
- 移动对话框(v0.14.2):扩展内目录选择器——面包屑导航 + 子目录懒加载展开,移动到自身子目录时确认按钮禁用(防递归);取消静默、失败 toast 明确报错;
- 快捷键:
F2 重命名、Del 删除、Ctrl+L 编辑地址。
右区·历史跟随
- 选中文件/文件夹即显示跨移动/重命名跟随的完整提交历史:文件头显示路径链徽标(历代路径分段);历史列表带时期徽标(旧名时期灰标)与移动/重命名里程碑行;“跟随移动”可开关(关闭则只看当前路径);
- 每条提交:ⓘ 就地展开详情(不用跳视图)、📄 只读打开该历史版本;
- 勾选任意两条 → 比对差异(blob 级
git diff sha1:旧路径 sha2:新路径,跨改名/移动时期依然有效);
- 移动后引导:移动/重命名后提示"纯变更单独提交"(混合移动+内容修改会破坏 git 的 R100 重命名识别);在系统资源管理器手动拖动后,回到 GitBoard 会自动检测并给出同样引导;
- 入口:工具栏「🗂 文件」/ VS Code 资源管理器右键「查看文件历史」。
12. 错误通知与 AI 诊断(v0.22.0)
- 错误通知:Fetch / Pull / Push / 合并等操作失败时,右下角弹常驻错误通知(不阻塞其他操作)——人话原因 + 可折叠的 git 原始输出 + 「重试」按钮;push 被拒(non-fast-forward)则弹专门的「拉取并推送」引导确认;
- AI 分析:Copilot 可用(VS Code ≥ 1.99 且已登录)且失败非取消/停滞时,通知附「AI 分析」按钮——一步直达诊断模态,流式渲染三段式分析(原因 → 解决步骤(含可直接执行的 git 命令)→ 预防);首次使用弹隐私确认,错误信息与 git 输出中的 URL 凭证自动脱敏(
://user:token@ → ://***@)后才发送;Esc 可中途停止;
- 一键修复:诊断附带修复方案时,修复命令经本地白名单独立分级——
run(安全,直接执行)/ confirm(逐条弹红色危险确认)/ copy(仅复制命令);不信任模型自报等级——--force、clean、config 与未知旗标永远只允许复制;执行只传步骤索引,宿主端重校验防篡改;「一键执行(n)」顺序执行、任一步失败即停,并可携带最新错误重新诊断形成闭环。
快捷键
| 按键 |
功能 |
Ctrl+Alt+G(macOS Cmd+Alt+G) |
打开提交图 |
Ctrl+Alt+C(macOS Cmd+Alt+C) |
打开工作副本(提交)视图并聚焦信息栏 |
Ctrl+Enter |
提交(提交信息框内) |
Esc |
停止 AI 生成 / 取消 AI 诊断流式 |
↑ / ↓ |
移动选中提交 |
Enter |
打开文件所在差异(在详情面板中) |
F2 / Del / Ctrl+L |
文件页:重命名 / 删除 / 编辑地址栏 |
常用设置
(Ctrl+, 打开设置后搜索 "gitboard")
| 设置 |
默认 |
说明 |
gitboard.gitPath |
自动检测 |
git 可执行文件路径 |
gitboard.graphStyle |
github |
走线风格:github(GitHub 风细线圆弧转弯、空心合并点) / curved(短半径圆角)/ angular(直角折线) |
gitboard.graphBranchScope |
local |
提交图默认范围:local(本地分支及其上游) / all(全部引用) / current(当前分支及其上游);工具栏「全部/本地/当前」分段可随时切换 |
gitboard.branchGroupByPrefix |
true |
侧栏与选择器分支按名称前缀递归多级分组(/ 逐段嵌套,缩进逐级递增),组头可折叠、计数,折叠状态跨会话保持 |
gitboard.notifyWidth |
420 |
右下角通知区宽度(320–560 像素);拖拽通知区左缘可实时调整并跨会话记忆(优先于此设置) |
gitboard.commitPageSize |
500 |
每页加载提交数(100–5000) |
gitboard.logOrder |
topo |
提交排序:topo(走线规整,默认)/ date(超大仓库更快) |
gitboard.maxAutoLoad |
20000 |
自动加载上限 |
gitboard.defaultPullStrategy |
merge |
pull 策略:merge / rebase / ff-only |
gitboard.dateFormat |
datetime |
时间格式:YYYY-MM-DD HH:mm:ss / 相对时间 / ISO |
gitboard.rowHeight |
default |
行高:紧凑 20 / 标准 24 / 舒适 28 |
gitboard.detailPanelPosition |
bottom |
详情面板位置:底部 / 右侧 |
gitboard.language |
auto |
界面语言(工具栏 A/中/EN 按钮一键切换,即时生效) |
gitboard.fetchOnOpen |
true |
打开视图时自动 fetch |
gitboard.autoFetchInterval |
10 |
后台自动获取间隔(分钟,0=关闭):静默 fetch 全部远程,拉到新提交自动更新徽标与提交图 |
gitboard.netStallTimeout |
180 |
网络操作(Fetch/Pull/Push)无输出空闲超时(秒,0=关闭):连接停滞自动中断并提示重试,防无限挂起 |
gitboard.opVerify |
quick |
Git 操作后快速校验:quick=本地探针核对操作意图(假成功黄色警示);deep=Pull/Push 附 ls-remote 远端确认;off=关闭 |
gitboard.pullFetchSummary |
true |
Pull/Fetch 拉到新提交后弹窗显示纯净提交摘要 |
gitboard.revealSelectStyle |
classic |
「在资源管理器中显示」的 explorer 传参形态(explorer 对 /select 的解析随 Windows 版本而异):classic = 无引号原样单参数(各版本通用);separate / quoted 为异构环境兜底 |
gitboard.startView |
graph |
打开时的初始视图:提交图 / 工作副本 / 上次使用 |
gitboard.ai.enabled |
true |
启用 Copilot AI 能力:生成提交信息 + 操作报错 AI 诊断(Copilot 不可用时相关入口自动隐藏) |
gitboard.ai.modelFamily |
默认模型 |
首选 Copilot 模型 family |
gitboard.ai.language |
auto |
生成语言(auto = 跟随近期提交) |
gitboard.ai.learnFromHistory |
true |
学习近 10 条提交的风格与语言 |
gitboard.ai.useWorkspaceInstructions |
true |
遵循工程指示文件(.copilot/、.github/) |
gitboard.ai.autoFix |
true |
操作失败自动打开 AI 诊断;修复步骤带「命令+作用+后果」三要素、一键人审执行,失败自动重新诊断(不限轮,关闭窗口即停) |
gitboard.commit.clearMessage |
true |
提交成功后清空信息框 |
gitboard.commit.pushAfter |
false |
「提交后推送」复选框默认值 |
从源码开发
npm install
npm run watch # F5 调试(“运行 GitBoard 扩展”)
npm run typecheck # 双工程类型检查
npm test # 单元测试 + 真实 git 冒烟(GITGRAPH_SMOKE=1 启用)
npm run build && npm run package
常见问题
- 安装新版本后行为没变化? 务必执行“开发者:重新加载窗口”;可对照工具栏右侧版本号确认当前构建。
- 活动栏里找不到 GitBoard 图标? 若工作区处于受限模式(不受信任),VS Code 会禁用本扩展——在“管理工作区信任”中将文件夹设为受信任即可。
- 「在资源管理器中显示」没反应或打开了错误目录? 少数 Windows 构建上 explorer 对
/select 参数的解析不同——在设置中把 gitboard.revealSelectStyle 依次换成 separate、quoted 试试(即时生效,无需重载);都不行请带上 Windows 版本(winver)到 Issues 反馈。
- 支持 vscode.dev / github.dev 吗? 不支持,插件需要在本机执行 git 命令。
- 超大仓库卡吗? 分页 + 虚拟滚动保证流畅;可运行
git commit-graph write --reachable 进一步加速翻页。
- ✨ AI 生成按钮没出现? 需要 VS Code ≥ 1.99 且已登录 GitHub Copilot(与 Copilot Chat 同一账号);未登录或不可用时按钮自动隐藏,其余提交功能不受影响。也可检查
gitboard.ai.enabled 是否开启。
- 错误通知上没有「AI 分析」按钮? 与 ✨ 同一条件:VS Code ≥ 1.99、已登录 Copilot、
gitboard.ai.enabled 开启,且扩展 ≥ v0.22.0、失败非取消/停滞且 git 有输出;push 被拒走专门的「拉取并推送」确认框,不带该按钮。快速自检:提交信息栏有 AI 模型下拉即 Copilot 可用。
- AI 会发送什么内容? 已暂存差异(暂存为空时为全部更改)与工程指示文件内容,经 GitHub Copilot 服务处理(使用你当前登录的账号与配额);首次使用会弹窗确认,超限文件只发送统计不发送内容。
- 一次性提交很多代码时 AI 会卡死吗? 不会:文件统计与差异均封顶截断,prompt 始终在模型上下文内;Copilot 60 秒无响应会自动停止并提示重试/换模型;即使 git 读取差异失败也会立即报错并解锁界面。
- 移动文件夹后历史会丢吗? 不会。文件页的历史查询基于
git log --follow + 目录边界反查,跨移动/重命名完整跟随;唯一要求是纯移动单独成提交(移动的同时大改内容会破坏 git 的重命名识别),扩展会在你移动后主动提醒。
- 图形列想换回旧样式? 设置
gitboard.graphStyle 为 curved(短半径圆角)或 angular(直角折线)即可。
更新日志
- v0.25.0(2026-09-11):AI 直接解决错误(#37)——①自动诊断:新增
gitboard.ai.autoFix(默认开启,可关),操作失败且 Copilot 可用时自动打开 AI 诊断,无需手动点「AI 分析」;②修复步骤三要素:每步呈现「命令 + 作用 + 后果」(AI 生成、仅展示——执行与否仍由本地白名单校验决定),危险确认框同样附带作用/后果说明,看一眼即可放心点击;③失败自动重新诊断(不限轮):一键执行中任一步失败,自动携带新错误进入下一轮诊断(标题显示「第 N 轮」),循环直至解决;关闭诊断窗口(Esc/×/停止)随时终止;执行始终全人审(一键 + 危险级逐条确认),--force 家族与 reset --hard 仍永不执行。
- v0.24.2(2026-09-11):实机测试缺陷修复(#35)——①文件页静态文本语言残留:
S.t 初始为中文兜底、bootstrap 后才切实际语言,文件页历史区标题与比对按钮只在构造期设置一次——现已随 update() 刷新(英文界面不再显示中文);②摘要英文单复数:翻译函数新增 {n^单数|复数} 占位语法,拉取摘要的标题/汇总/作者统计/缺失提示在数量为 1 时正确显示单数("1 new commit · 1 author · 1 file");③实机复验澄清两项测试假阳性并回归验证「完成合并」真实链路完好。
- v0.24.1(2026-09-11):互斥收尾三项(#33,#31 遗留)——①index.lock 撞锁退避窗口加大:拉取合并/检出阶段与本地暂存/提交并行时的瞬时锁冲突,退避 400ms→1600ms,大变更集常规持锁不再误报失败;②未完成合并时检出预禁用:检出按钮与检出选择器在合并/变基未完成时禁用并说明原因(与 Pull/Push 同口径,git 的
resolve your current index first 拒绝前置);③分离 HEAD 拉取提示:detached 状态点拉取提示「不在任何分支上,请先检出分支」,与「无上游分支」区分;顺带修复工具栏守卫原因被常规 title 覆盖的时序问题。
- v0.24.0(2026-09-11):网络操作互斥与摘要收窄(#31)——①网络操作全互斥:fetch / pull / push / 标签推送(含删除远端标签)任一进行中,工具栏其余网络按钮一律禁用并显示原因(命令面板等旁路入口由宿主拒绝+提示兜底;工作副本空态按钮点击时同样拦截),杜绝「Fetch 后 Pull 语义叠加与排队重复」;②摘要仅在 Pull 合并完成时弹出:fetch(含打开时自动获取)静默更新分支 ↓n 徽标与提交图,不再弹「获取摘要」——双弹窗重复与「未合并文件点击报错」的场景就此消失;③未完成合并时 Pull 按钮与 Push 一同预禁用并提示原因;④标签网络操作纳入互斥去重登记(慢网络连点不再堆积)。
- v0.23.3(2026-09-11):获取摘要未合并文件误报修复(#29)——①行操作按工作区状态禁用:摘要文件行探测到不在工作区(fetch 尚未合并 / 已被后续提交删除)时,「打开」「在文件管理器中显示」按钮置灰并提示原因,不再点击后报"工作区已不存在";②fetch 摘要语义澄清 + 拉取直达:获取摘要弹窗标明"远端新提交,尚未合并到本地工作区"并提供「立即拉取」主按钮,一步完成合并(fetch 自动获取不弹摘要、行为不变);③pull 半完成态闭环:pull 被本地未提交修改拒绝时,失败通知附「贮藏并重试」(--autostash)一步重拉;④网络看门狗喂狗源补 stdout(pull 的合并/检出阶段只写 stdout,超大变更集检出不再被误判停滞)。注:v0.24.0 起摘要仅在 Pull 时弹出,②的 fetch 摘要弹窗已随之移除。
- v0.23.2(2026-09-10):分支分组升级递归多级前缀嵌套——侧栏与检出/筛选选择器同步:多段前缀逐级分组(
release/1.0/x → release/ 组 > 1.0/ 子组),缩进逐级递增(组头 12/26/42/58px、分支行 28/44/60/76px,每级 +16px,任意深度);组内行显示剥前缀短名(远程分支同时剥 remote 名),层级一目了然;折叠状态跨会话记忆且兼容旧键。
- v0.23.1(2026-09-10):侧栏支持拖拽调宽——右缘拖拽手柄(170–460px,悬停高亮),宽度跨会话记忆;折叠态手柄自动隐藏。
- v0.23.0(2026-09-10):UI 层级与可读性整备(#22 全界面几何审查落地)——①层级缩进补齐:检出/筛选选择器三级缩进(大区头/顶层行/前缀组头/组内行 12/28/26/44px,查询态平铺不缩进)、工作副本目录分组 12/28px、侧栏标签行对齐分支区、侧栏区头字重 600 修正层级倒挂;②通知区可调:新增
gitboard.notifyWidth 配置(320–560,默认 420),左缘拖拽实时调宽并跨会话记忆;③对齐修复:提交列表表头与数据列滚动条槽同源(修 2–5px 错位,附防回归断言)、检出选择器远程行信息间距;④窄视口紧凑:主区宽 <1080px 时视图切换自动收为纯图标;⑤清理:文件页提示文案去 emoji 残留、字号收敛为 5 档(10–14px)。
- v0.22.1(2026-09-10):侧栏分支两级分组缩进强化——一级组头(本地分支/远程·origin)→ 组内顶层分支行 → 二级前缀组头 → 组内分支行四级递进缩进(12/28/26/44px),分组层级一目了然。
- v0.22.0(2026-09-10):操作报错 AI 诊断与一键修复(#8,人审一键、机器管边界)——①失败上下文透传:操作失败携带 git 命令与退出码直达前端(此前在 runner 层被抹掉,诊断价值最高的字段缺失);②错误通知「AI 分析」入口:操作失败弹常驻错误通知(重试+折叠 git 输出),Copilot 可用且非取消/停滞时附「AI 分析」按钮,一步直达诊断模态;③AI 诊断模态:三段式提示词(原因/解决步骤含可执行 git 命令/预防)、流式渲染、URL 凭证自动脱敏(
://user:token@ 掩码后才发送);④一键修复(机器管边界):诊断附 gitboard-fix JSON 修复方案,本地白名单独立分级 run/confirm/copy——不信任模型自报等级,--force/clean/config/未知旗标永远只给复制,confirm 级弹危险确认,执行步骤只传索引由宿主重校验防篡改(push 白名单仅扩 --force-with-lease,零新执行面);⑤本版同时合入 v0.20.0 UI 反馈体系重构与 v0.21.0 多分支体验(#18/#24/#23)。
- v0.21.0(2026-09-10):多分支仓库体验(#24,含 #23)——①图形范围过滤:工具栏「全部 / 本地 / 当前」一键切换提交图范围;默认「本地」= 本地分支及其上游的提交(远端领先状态照常入图),不再被仅存在于远端的分支与标签 tips 淹没(
gitboard.graphBranchScope 可改默认);②分支可见性强化:本地 ⑂ / 远程 ⇅ 徽标前缀(非色觉依赖)、HEAD 徽标描边醒目、存在同名本地分支时远程徽标降淡、当前分支主干走线加粗、侧栏「未推送 / 已有本地」小标;③侧栏前缀分组(#23):本地与远程分支按 / 前缀恒分组,组头可折叠 + 计数,折叠状态跨会话保持(gitboard.branchGroupByPrefix 可关);④检出模糊搜索:新检出选择器(工具栏「检出」按钮 / 命令面板 GitBoard: 检出分支…)支持分支名子序列模糊匹配与命中高亮,远程分支内联输入本地名一步检出;工具栏分支筛选下拉同步升级为该选择器(含范围项)。
- v0.20.0(2026-09-05):Webview UI 反馈体系重构与交互阻塞设计(#18)——①提交时间列修复:窄窗口下时间不再被截断——列宽按当前字体实测保底(Canvas 测量,杜绝字体/DPI 差异),空间紧张自动降级为
MM-DD HH:mm 紧凑格式(完整时间悬停可见),表头「时间」与数据统一右对齐;②通知(Notification):右下通知替代旧 toast——图标+标题+正文三档层级、分级停留(info 4s / 成功 5s / 警告 8s / 错误常驻)、堆叠上限 4 条;操作失败不再弹阻塞式确认框,改为常驻错误通知(含「重试」按钮与可折叠的 git 输出);成功类庆祝 toast 取消(进度行绿闪+按钮闪绿足够);③交互阻塞矩阵:有依赖的操作互相阻塞并说明原因——冲突未解决时提交/AI 入口预禁用(悬停显示原因)、未完成合并时推送禁用、工具栏在途按钮不再静默吞点击(点击=入队去重,悬停显示「排队中·第 N 位」)、确认对话框首点即禁用防双击、Amend 期间 HEAD 前进自动退出修订模式;④横幅(Banner)统一:冲突/待完成合并/移动检测/推送询问/amend 提示/比对条七处样式归一为同一组件五个语义变体,推送询问条升级为带 sha+提交主题摘要;⑤全站图标 SVG 化:视图切换、工具栏、进度行、文件页等处的 emoji 字符全部替换为线性 SVG 图标(跨平台渲染一致);⑥对齐审计:字号收敛为 5 档、面板内边距 12px 基准、图标命中区统一 20px、数字列等宽右对齐;设计令牌(间距/字号/语义色)落地为 CSS 变量。
v0.19.3(2026-09-05):修复「冲突解决功能无效」——操作队列双道拆分与全链路可感知反馈(#7)——①本地/网络双队列:冲突解决、暂存、丢弃等秒级本地操作不再排在 Fetch/Pull/Push 等网络操作后面(此前网络停滞时队列被堵死,冲突按钮点击后 op 永久排队、表现为"点了没反应");双道并行产生的 index 锁瞬时冲突自动退避重试;②入队即反馈:本地操作从点击那刻起在进度行可见(排队中显示"第 N 位",轮到执行切换为执行态),不再有零反馈窗口;③autoFetch 后台让路:网络道忙时后台自动获取整轮跳过,不再与用户操作争队列(顺带修复其绕过去重登记的缺陷 #16);④冲突行乐观态:点「我的/对方的」行内立即转 ⏳ 并禁点按钮,完成/失败即解除,失败可重试;「完成合并」确认后按钮进入执行态防连点;⑤统一推送收尾:「拉取并推送」遇冲突时,全部解决并完成合并后弹确认条一次性推送全部新提交(推送永远显式确认,对齐 IDEA/SourceTree),中止合并则自动作废。冲突文件分类(文本/图片/Excel 等 NUL 二进制/万行超限)抽取为纯函数并有专项测试覆盖(含真实仓库三类文件全链路冒烟)。
v0.19.2(2026-09-05):修复「拉取记录不完整」——Pull 稳定性、网络防护与操作后校验五项加固(#6)——①Pull 改为按分支级配置(branch.<name>.remote/merge)拉取:此前显式传"本地分支名"当远端分支参数,本地名 ≠ 上游名时(如默认分支改名后 branch -u origin/main master)会去拉同名的远端旧分支,git 报 "Already up to date." 假成功而对方新提交永远拉不进来;②Fetch/Pull/Push 增加网络停滞防护:git 层低速中断(持续 <1KB/s 60 秒)+ 无输出空闲看门狗(gitboard.netStallTimeout,默认 180 秒,0=关闭),连接停滞自动中断并提示重试,不再无限挂起占用操作队列(看门狗同时覆盖 SSH 等非 HTTP 远端);③Pull"已是最新"反馈带上游分支名(如 "origin/main 已是最新"),拉错分支/远端一眼可见;④慢网络下连点 Fetch/Pull/Push 只执行一个(同类操作去重),排队期间被取消的操作不再执行;⑤操作后快速校验(gitboard.opVerify):Pull/Push/提交/切换/重置/标签操作在退出码 0 后用本地只读探针核对操作意图——拉取后仍落后、推送后仍有未达提交(推错分支特征)、提交后 HEAD 未变化等"假成功"以黄色警示明确标出,探针异常不影响操作结果(fail-open);deep 档对 Pull/Push 额外一次 ls-remote 远端确认,可检出 fetch 路径陈旧(代理/镜像缓存旧引用)。
v0.19.1(2026-09-04):修复筛选功能三缺陷(#5)——①按作者筛选无效:含 []、逗号等字符的作者名(如 dependabot[bot])曾因字符白名单被静默丢弃导致筛选不生效,现放宽校验并按 git 基本正则转义后精确匹配;②按日期筛选错位:git 的 --since/--until 按提交者日期过滤而列表显示作者日期,rebase/cherry-pick 过的仓库两边对不上,现改为按作者日期(与显示同口径)在扩展侧过滤,分页改为扫描游标续扫;③新增:选择起始日期时自动带入截止日期 = 起始日期。
v0.19.0(2026-09-03):「快速笔记」整体迁移为独立插件 QuickNotes——GitBoard 回归纯 Git 工具,安装包随之移除 TipTap 等前端依赖、更轻量。笔记数据与默认目录(~/GitBoardNotes)保持不变,导出的 HTML 仍可往返编辑;Ctrl+Alt+N 快捷键与活动栏入口随功能移至新插件。
v0.18.x
- v0.18.4(2026-09-02):文档——README 全面重排版(新增 Issue 反馈入口与作者联系方式、版本历史独立为更新日志、补充快速笔记详解与 reveal 排查 FAQ)。
- v0.18.3(2026-09-02):「在资源管理器中显示」在部分 Windows 构建上依旧无效(explorer 对
/select 的解析随版本漂移)——改用无引号原样单参数的经典形态(自 XP 起各版本通用),新增 gitboard.revealSelectStyle 设置供异构环境一键切换兜底。
- v0.18.2(2026-09-01):修复长路径与含空格路径下「在资源管理器中显示」失效(含空格曾直接打开文档目录、>259 路径在严格 MAX_PATH 系统上曾误报"文件已不存在")——增加
\\?\ 前缀存在性探测与"最深可定位祖先目录"降级;快速笔记同步加固,文件缺失时明确提示。
- v0.18.1(2026-09-01):修复合并冲突"我的/他人的"二选一选侧反转(merge 与 rebase 均已修正)与二进制冲突预览打开错误一侧;工作副本文件列表宽度可自由拉宽并跨会话记忆;文件页"移动到"可连续使用且对话框初始定位到文件所在目录;后台自动获取增加低速中断保护。
- v0.18.0(2026-08-30):笔记编辑深化——代码块实时语法高亮 + 独立行号 + 语言标签(纯文本自动识别)、信息块标题可直接输入、画板连线默认正交折线、Delete 只删选中图形、所有非正文元素带删除按钮、行号支持表格按行计数并在图片加载后自动对位。
v0.17.0(2026-08-30):笔记体验升级——文档标题头(旧笔记首行 H1 自动迁移)、正文插图(粘贴/拖放/选图 + 四角拖拽调宽)、行号显示、AI 浮层可拖动并记忆位置、/ 菜单与 AI 菜单空白点击或 ESC 关闭、删除笔记确认框居中可见、画板图形密度对齐正文行高、工具栏图标全部矢量 SVG。
v0.15.0(2026-08-30):新增「快速笔记」——三栏布局富文本笔记(表格/卡片/代码块/SVG 画板// 菜单),Copilot AI 编辑(续写/润色/翻译/摘要/待办化 + 差异预览),存储于工程外目录、完全独立于 Git,导出 Markdown / 自包含 HTML / PDF。
v0.14.x
- v0.14.7(2026-08-30):启动不再等待 Git 探测——工具栏/工程列表/布局记忆先行渲染,仓库扫描后台加载,无仓库时立即显示引导。
- v0.14.6(2026-08-29):图形列默认 GitHub 风格(细线低饱和配色 + 圆弧转弯 + 空心合并点)。
- v0.14.0(2026-08-29):文件历史页——跨移动/重命名跟随完整历史、路径链与时期徽标、任意两版本比对、Win11 式地址栏。
English Documentation
简体中文 | English
Commit graph · working-copy commits · 3-way merge · pull summaries · file history · quick notes — everyday Git in one panel, without leaving VS Code.
Bug reports and feature requests are always welcome — every piece of feedback counts:

Introduction
GitBoard is a VS Code (desktop) extension that puts a graphical commit history at the center and gathers everyday Git operations into one panel: browse a colored topology graph, inspect diffs, Fetch / Pull / Push, reset and checkout, commit SourceTree-style with AI commit messages via GitHub Copilot, resolve conflicts in a 3-way merge editor, see "who changed what" in pull summaries, and follow file history across moves and renames.
Large repos are handled with paged loading, virtualized scrolling and layered rendering; startup never waits for Git probing — the shell renders first, scanning loads in the background.
Highlights:
- 🎨 GitHub-style colored topology graph (curved / angular styles available);
- ✅ SourceTree-style working-copy commits with Copilot-generated messages;
- 🧠 AI error diagnosis & one-click fix — a failed op's notification opens a streamed Copilot analysis; fix commands run through a local whitelist;
- 🔀 IDEA / Beyond Compare style 3-way merge resolver;
- 📥 Pull/fetch summaries grouped author → directory → file;
- 📁 File history page that follows moves & renames, with any-two-version compare;
- ⚡ Large-repo friendly — paging, virtualization, background auto-fetch.
Features
| Feature |
Description |
| Commit graph |
Colored topology with branches, merges, criss-cross and multi-root repos; HEAD / branch / remote / tag chips. GitHub style is the default since v0.14.6: thin lines, low-saturation palette, arc turns; solid dots for commits, hollow rings for merges, HEAD emphasized with a thick background-colored border. Switch back via gitboard.graphStyle: curved (short-radius corners) or angular (right angles) |
| Commit details |
Full SHA (one-click copy), author/committer, full message, changed files with status and ± counts grouped by directory (filename-only rows); Ctrl/⌘ multi-select and Shift range-select, open them all at once; panel height remembered as a percentage; "open in VS Code" button on the diff toolbar |
| Diffs |
Inline diff (compact mode shows changed lines only, ⋯ folds unchanged runs) + the built-in diff editor with syntax highlighting; merges diffed against their first parent |
| File actions |
Open working file, open any revision read-only, reveal in the system file manager (falls back to the parent folder for deleted files), copy path; long Windows paths (>259 chars) automatically degrade to the deepest revealable ancestor folder |
| Git operations |
Fetch (--all --prune), Pull (merge/rebase/ff-only), Push (with upstream setup), Reset to commit (soft/mixed/hard — hard needs a red confirmation), checkout branches (fuzzy-search picker; remote branches ask for a local name inline), checkout remote branch as local tracking, detached HEAD; SourceTree-style background auto-fetch (10 min by default, configurable); a progress bar under the toolbar shows git detail, elapsed time, and a cancel button for network ops |
| Working-copy commits |
Staged/Unstaged groups, check a box to git add / uncheck to unstage; files grouped by directory, long filenames wrap; one-click ~$ Office lock-file cleanup; single-file HEAD↔worktree diff; Commit / Commit & Push / Amend / Stage-all-and-commit; recent-message reuse; discard with double confirmation; delete files (tracked files move to Unstaged as D); hover quick actions (open in new tab / copy name / copy path / delete); on-demand status refresh button; per-repo drafts; the post-commit "push?" ask-bar appears only when no other push affordance exists |
| AI commit messages |
One-click generation via GitHub Copilot: streamed inline, stop/regenerate/model picker; style learned from the last 10 commits; automatically follows .copilot/ and .github/ instruction files; uses your signed-in account — zero credentials. Hardened for huge changesets: capped summary & diff, 60s watchdog, UI always unlocks; falls back to file-name/folder-structure inference when the diff is unusable, honestly noted |
| AI error diagnosis |
Failed ops raise a persistent error notification (retry + collapsible git output); when Copilot is available an AI Analyze button streams a three-part diagnosis (cause / fix steps with runnable git commands / prevention), URL credentials masked before sending; fix commands pass a local whitelist with run/confirm/copy tiers, red confirmations for dangerous steps, and index-based host-side re-validation (v0.22.0) |
| Merge & conflict resolution |
IDEA / Beyond Compare style 3-way merge editor: Mine – Merged (what gets saved, editable) – Theirs; per-chunk buttons (use mine / theirs / keep both / neither) + «» adopt arrows + inline editing, git conflict markers never shown, conflict minimap; pull/commit conflicts open a guidance banner; rejected pushes guide you to pull-and-push; binary = pick-one-side + system preview; deleted-side scenarios; oversized files get an explicit warning and reduce to whole-file choices; abort anytime; a confirmation finishes the merge (rebase semantics flipped automatically); progress is saved to the file itself — reopening is lossless |
| Pull/Fetch summary |
After a Pull merges new commits, a popup lists the pure changes (merge ops excluded; fetch silently updates the ↓n badges and the commit graph — no popup): grouped author → directory → file: filename rows (never truncated) with working-tree size & mtime, inline open/reveal buttons; rows detected as absent from the working tree (deleted by later commits) get their buttons disabled with a tooltip; same-file commits merged into ×N rows, renames as old → new; toggle with gitboard.pullFetchSummary, on by default |
| File history page |
Fourth view "🗂 Files": an explorer (tiles/details views, Win11-style address bar, multi-select with Delete / Move to… / Rename buttons) + a right panel with the full history following moves/renames (path chain, era badges, milestone rows, inline details, read-only revisions, any-two-version compare) |
| Filtering |
Branch/remote/tag filter + multi-select author dropdown + date range, stackable and remembered per repository |
| Projects |
"Projects" section in the sidebar: save favorite workspace folders with custom names; double-click to switch the current window, right-click for new window / rename / remove |
| Large-repo performance |
Paged loading (500/page, configurable cap), virtualized rows + viewport-only canvas rendering, debounced auto-refresh on .git changes |
| UI |
Follows VS Code light/dark themes; collapsible, drag-resizable sidebar («/» toggle, 18px edge handle to restore, 170–460px width, remembered); drag-resizable persisted columns; English/中文; status-bar branch; activity-bar icon badge with the uncommitted-change count |
Install
Option 0 — Marketplace (once published)
Search GitBoard in the Extensions view (Ctrl+Shift+X), ID: EmonZhang3438.gitboard, or:
code --install-extension EmonZhang3438.gitboard
Option 1 — CLI (recommended)
code --install-extension gitboard-0.25.0.vsix
Then run Ctrl+Shift+P → “Developer: Reload Window” (required after every upgrade; check the version label on the toolbar).
Option 2 — From the UI
Extensions view (Ctrl+Shift+X) → ··· → “Install from VSIX…” → pick the file → reload.
Option 3 — From source
npm install && npm run package
Quick Start
- Open a folder/workspace containing Git repositories;
- Click the GitBoard icon in the Activity Bar (or press
Ctrl+Alt+G, or run GitBoard: Open Commit Graph);
- Click a commit row for details, double-click a file to open the diff editor, right-click everywhere for more actions;
- To commit: switch to the “▣ Working Copy” tab (or
Ctrl+Alt+C) → check the files to stage → write the message or click ✨ to generate it with Copilot → Ctrl+Enter to commit.
Using the Features
1. Layout — see the numbered badges in the overview: ① toolbar & filters, ② branch/remote/tag tree, ③ commit graph, ④ commit summary, ⑤ changed files, ⑥ inline diff. The segmented control on the far left switches between Graph / Pure / Working Copy / Files; state is preserved across switches. The « button collapses the projects/repo/branch sidebar for a full-width graph (an 18px edge handle restores it; the state is remembered). The detail panel is drag-resizable (remembered as a percentage) and can be moved to the right side in settings. The Pure view lists regular commits only (merges hidden) with a slim dot-timeline column — one dot per commit, HEAD marked with a red ring.

2. Browsing — GitHub style (default since v0.14.6): 2px thin lines, a low-saturation palette (separate sets for light/dark themes), quarter-arc lane changes with a short horizontal middle, arc-style merge elbows; solid dots for commits, hollow rings for merges, HEAD emphasized with a thick background-colored border. Prefer the old look? Set gitboard.graphStyle to curved (short-radius S curves, merge outer rings, HEAD red ring) or angular (right angles). Chips: green = local branch, purple = remote, yellow = tag, HEAD → main = current branch. Scrolling near the bottom auto-loads the next page (500/page by default; auto-load caps at 20,000). ↑/↓ move the selection. A progress bar under the toolbar tracks network operations with git detail, elapsed time and a cancel button. A scope segmented control (All / Local / Current) narrows what the graph draws (v0.21.0) — the default "Local" shows local branches plus their upstreams, so multi-branch repos aren't drowned in remote-only branch and tag tips (gitboard.graphBranchScope changes the default). Narrow viewports degrade gracefully — the toolbar wraps and columns shrink without overlap.
3. Details & diffs — click a row for the full SHA (click to copy), author/committer, dates and the complete message. Click a file to preview its diff inline — compact mode highlights only added/removed lines and folds unchanged runs into ⋯ rows; switch to "with context" for full context. Double-click a file (or use the header button) to open VS Code's built-in diff editor. Ctrl/⌘-click toggles files into a selection, Shift-click selects a range; the ↗ button opens all selected files at once (missing files are skipped with a notice). Merges are diffed against their first parent.
4. Operations

① commit-row context menu (detached checkout, reset, copy SHA/subject); ② file context menu (open working file, read-only revision, reveal in file manager, copy path); ③ branch menu (double-click a branch to check it out; double-click a remote branch to create a local tracking branch); ④ the reset dialog — hard resets require an explicit red confirmation when uncommitted changes exist. The ⑂ Check out button (or GitBoard: Check Out Branch… in the command palette, v0.21.0) opens a fuzzy-search picker — subsequence matching with hit highlighting; local branches check out on Enter, remote branches ask for a local name inline. Fetch (⟳) defaults to --all --prune; per-remote fetch from the sidebar context menu. Pull/Push act on the current branch's configured upstream (branch.<name>.remote/merge); a push without upstream offers to create one. Background auto-fetch (SourceTree-style) runs silently every 10 minutes by default (gitboard.autoFetchInterval, 0 = off) and updates badges/graph without popups.
5. Filtering

Three stackable filters: the branch dropdown (or click a sidebar node), a multi-select author dropdown (candidates auto-collected from the repo, with search/select-all/clear), and a date range (the end date includes the whole day). An × clears everything at once; filters are remembered per repository.
6. Projects — the Projects section at the top of the sidebar stores favorite workspace folders: click + to save the current workspace or browse any folder (custom names); double-click a project to replace the current window, or right-click for new window / rename / remove / copy path. The matching project is highlighted; the list persists across sessions.
7. Personalization — drag column borders to resize (persisted); colors follow your theme; the UI language switches instantly via the A / 中 / EN toolbar button (no reload). Fetch/Pull/Push/Refresh buttons pulse while running and flash green on completion with explicit toasts ("remote has nothing new" / "already up to date" / "N branch refs updated").
8. Working copy & commits

Switch via the "▣ Working Copy" tab (dirty-file badge) or Ctrl+Alt+C. The left pane groups Staged / Unstaged files — check to git add, uncheck to unstage — with directory grouping, old → new renames and U untracked marks. Hovering a row reveals quick actions: open in a new tab (editable), copy name, copy path, delete; a ⟳ refresh button re-runs git status on demand (editor edits never touch .git); a broom button removes ~$ Office lock files when present. Clicking a file shows its full HEAD↔worktree diff with ‹ › to walk files. The bottom bar has a single message box (first line = subject, 50-char counter), a 🕘 recent picker, and Commit ⏎ with a dropdown (Commit & Push / Amend / Stage-all-and-commit); drafts are saved per repo. ✨ AI generates the message from the staged diff via Copilot — streamed inline, Esc to stop, model picker included; workspace instruction files are followed automatically. Discard resets to HEAD behind a red double confirmation.
9. Merge conflicts

Pull/commit conflicts auto-switch to the working-copy view with a guidance banner (resolve one by one / all mine / all theirs / abort). Click "Merge…" on a conflict row to open the 3-way editor: Mine | Merged (what gets saved — editable) | Theirs, with plain-language column badges and a fixed color legend. Per-chunk buttons (⬅ use mine / keep both / use theirs ➡ / keep neither), «» adopt arrows on side panes, inline editing in the middle column, and a conflict-distribution minimap on the right edge. Git conflict markers are never shown — blocks carry source-colored bars instead (blue = mine, green = theirs, gray = manual). Binary conflicts reduce to pick-one-side with a system-preview button; deleted-side scenarios offer keep / accept-deletion; oversized files (>16000 lines / 2MB) warn and reduce to whole-file choices. Abort restores the pre-merge state at any time; once everything is resolved, a confirmation bar finishes the merge (merge commit, or continue the rebase with flipped ours/theirs semantics). Resolution progress is flushed to the file itself — reopen anytime, nothing is lost.
10. Pull summary

After a pull merges new commits, a pure-change summary (branch/merge ops excluded) pops up answering "who landed which commits touching which files": grouped author → directory → file; filename-only rows (never truncated) with working-tree size & mtime and inline open / reveal buttons (auto-disabled with a tooltip when the file was deleted by a later commit in the same batch); the same file touched several times merges into one ×N row (hover lists every commit); renames show old → new. Toggle with gitboard.pullFetchSummary (on by default). Fetch never pops a summary — it silently updates the behind badges and the commit graph. Network operations (fetch/pull/push/tag push) are mutually exclusive: while one is running, the other network buttons are disabled.
11. File history page (v0.14.0)

The fourth view "🗂 Files" lets you move/rename folders without losing history:
- Explorer on the left: tiles or details view (name/date/type/size — every column resizable and remembered, folders first, colored type icons); drag-resizable pane width (280–640px, remembered);
- Win11-style address bar: breadcrumbs ⇄ edit mode (
Ctrl+L); accepts relative paths (B/A) as well as absolute paths — paste D:\repo\src or the quoted "copy file address" form from Explorer and it just works (v0.14.5); a file path locates and opens it; invalid paths get a red border with an explicit message;
- Multi-select & actions: Ctrl/Shift selection; dedicated Delete (git rm, recoverable until committed) / Move to… / Rename (F2) / Copy path buttons plus a filter box;
- Move dialog (v0.14.2): an in-extension folder picker — breadcrumb navigation with lazy child loading; moving into a descendant disables Confirm (no recursion); cancellations stay silent, failures toast clearly;
- History on the right: selecting a file/folder shows the full history following moves and renames — a path-chain badge (one segment per era), era badges for old-name periods, milestone rows for each move/rename, and a "follow moves" toggle. Every commit can be expanded inline or opened read-only; check any two commits to compare (blob-level diff, valid across rename eras);
- Move guidance: after a move/rename you are nudged to commit it alone (mixing moves with content changes breaks git's R100 rename detection); manual moves made in the system explorer are detected on return with the same nudge;
- Entry points: the "🗂 Files" toolbar tab, or right-click a file in the VS Code explorer → "Show File History".
12. Error notifications & AI diagnosis (v0.22.0)
Failed operations raise a persistent bottom-right notification (plain-language reason + collapsible git output + Retry) instead of a blocking dialog; a rejected push opens a dedicated pull-and-push confirmation. When Copilot is available (VS Code ≥ 1.99, signed in) and the failure isn't a cancel/stall, the notification carries an AI Analyze button that opens a diagnosis modal streaming a three-part analysis — cause / fix steps with runnable git commands / prevention. A first-use privacy confirmation appears; URL credentials are masked (://user:token@ → ://***@) before anything is sent; Esc stops the stream. When the diagnosis attaches a fix plan, commands pass a local whitelist with independent tiers: run (execute directly) / confirm (a red danger dialog per step) / copy-only — the model's self-reported tier is never trusted (--force, clean, config and unknown flags always degrade to copy), and steps execute by index with host-side re-validation against tampering. "Run all" executes sequentially, stops on the first failure, and can re-diagnose with the latest error.
Keybindings
| Key |
Action |
Ctrl+Alt+G / Cmd+Alt+G |
Open the commit graph |
Ctrl+Alt+C / Cmd+Alt+C |
Open the Working Copy view |
Ctrl+Enter |
Commit (inside the message box) |
Esc |
Stop AI generation / cancel AI diagnosis streaming |
↑ / ↓ |
Move selection |
F2 / Del / Ctrl+L |
Files view: rename / delete / edit address bar |
Settings
Search "gitboard" in Settings: graphStyle (github default / curved / angular), graphBranchScope (local default / all / current — default commit-graph scope), branchGroupByPrefix (sidebar & picker recursive prefix grouping), commitPageSize, logOrder, maxAutoLoad, defaultPullStrategy, dateFormat, rowHeight, detailPanelPosition, language, fetchOnOpen, autoFetchInterval, netStallTimeout, opVerify, pullFetchSummary, notifyWidth, revealSelectStyle (classic default — switch to separate/quoted if "Reveal in file manager" misbehaves on your Windows build), startView, ai.enabled (Copilot features — commit messages & error diagnosis; entries hide when unavailable) / ai.modelFamily / ai.language / ai.learnFromHistory / ai.useWorkspaceInstructions / ai.autoFix (on by default — auto-open AI diagnosis on failures; fix steps show command+action+consequence, one-click human-reviewed execution, unlimited auto re-diagnosis rounds until you close the window), commit.clearMessage / commit.pushAfter, plus gitPath for a custom git binary.
FAQ
- Nothing changed after upgrading? Run "Developer: Reload Window"; the version label on the toolbar tells you which build is live.
- No GitBoard icon in the Activity Bar? If the workspace is in restricted (untrusted) mode, VS Code disables the extension — trust the folder via "Manage Workspace Trust".
- "Reveal in file manager" does nothing or opens the wrong folder? Explorer's
/select parsing varies across Windows builds — try switching gitboard.revealSelectStyle to separate and then quoted (effective immediately, no reload); if none work, please report with your Windows version (winver) on Issues.
- vscode.dev? Not supported — the extension runs your local
git.
- Huge repos? Paging + virtualization keep it smooth;
git commit-graph write --reachable speeds up paging further.
- No ✨ AI button? Needs VS Code ≥ 1.99 and an active Copilot sign-in; the button hides itself when unavailable. Check
gitboard.ai.enabled.
- No "AI Analyze" button on error notifications? Same conditions as ✨: VS Code ≥ 1.99 with an active Copilot sign-in,
gitboard.ai.enabled on, extension ≥ v0.22.0, and a failure that isn't a cancel/stall with git output present. Rejected pushes open the dedicated pull-and-push dialog instead. Quick check: the commit-bar AI model dropdown appears iff Copilot is available.
- What does AI send? The staged diff (or all changes when nothing is staged) plus workspace instruction files, under your signed-in account and quota; a one-time confirmation appears first; oversized files are reduced to stats only.
- Does AI hang on huge changesets? No: summary and diff are capped, a 60s watchdog stops stalled requests, and any failure unlocks the UI immediately.
- Does history survive folder moves? Yes — the file page uses
git log --follow plus directory-boundary reverse lookup, so history follows moves/renames completely. The one rule: commit pure moves separately (mixing a move with content changes breaks git's rename detection); GitBoard nudges you right after a move.
- Want the old graph look? Set
gitboard.graphStyle to curved or angular.
Changelog
- v0.25.0 (2026-09-11): AI fixes errors directly (#37) — ① auto diagnosis: new
gitboard.ai.autoFix (on by default, toggleable) auto-opens the AI diagnosis whenever an operation fails and Copilot is available — no more clicking "AI analyze"; ② fix steps in three parts: every step shows command + what it does + consequence (AI-generated, display-only — what runs is still decided by local whitelist validation), and the danger confirmation shows the same info so one glance is enough before clicking; ③ unlimited auto re-diagnosis: if any step of "Run all" fails, the next diagnosis round starts automatically with the new error (title shows "round N") and loops until resolved; close the window (Esc/×/Stop) anytime to stop. Execution stays fully human-reviewed (one click + per-step confirmation for dangerous levels); --force family and reset --hard remain never-executable.
- v0.24.2 (2026-09-11): live-test defect fixes (#35) — ① file-panel static text language leftover:
S.t starts as a Chinese fallback until bootstrap resolves the real language, and the file page's history header & compare button were set only once at construction — they now refresh in update() (no more Chinese labels on an English UI); ② English singular/plural in the pull summary: the translate function gains a {n^one|other} placeholder syntax; the summary title/counts/author stats/missing-file note now read "1 new commit · 1 author · 1 file" at count 1; ③ two live-test false positives clarified and the real "Finish merge" flow regression-verified end to end.
- v0.24.1 (2026-09-11): mutex follow-ups (#33, leftovers of #31) — ① wider index.lock backoff: transient lock clashes between a pull's merge/checkout phase and local stage/commit now back off 400ms→1600ms, so ordinary large-checkout lock holds no longer surface as failures; ② checkout pre-disabled during an unresolved merge: the checkout button and branch picker are disabled with the reason (same treatment as Pull/Push — git's
resolve your current index first rejection is now preempted); ③ detached-HEAD pull message: pulling while detached now says "not on any branch — check out a branch first", distinct from "no upstream"; also fixes a toolbar timing issue where the guard reason got overwritten by the regular tooltip.
- v0.24.0 (2026-09-11): network-op mutual exclusion & summary scoping (#31) — ① network ops are mutually exclusive: while any of fetch / pull / push / tag push (incl. remote tag delete) is running, the other network toolbar buttons are disabled with the reason (command-palette and other side entries are rejected by the host with a toast; the working-copy empty-state buttons get the same intercept on click) — no more "Fetch then Pull" semantic stacking and queued duplication; ② the summary now pops only when a Pull completes: fetch (including fetch-on-open) silently updates the behind badges and the commit graph — the duplicate double popup and the "file not in working tree" error path are gone; ③ Pull joins Push in being pre-disabled during an unresolved merge, with the reason in the tooltip; ④ tag network ops are included in the mutual-exclusion registry (slow-network double-clicks no longer pile up).
- v0.23.3 (2026-09-11): fetch-summary false-error fix (#29) — ① row actions disabled when the file isn't in the working tree: when a summary row is detected as absent (fetch not yet merged, or deleted by a later commit), its open/reveal buttons grey out with a tooltip instead of failing with "not in the working tree" after the click; ② fetch summary semantics + pull shortcut: the fetch summary now states that these are remote commits not yet merged, with a Pull now primary button to merge in one step (background auto-fetch stays silent); ③ pull half-done recovery: when pull is rejected by uncommitted local changes, the failure notification offers Stash & retry (--autostash); ④ the network watchdog now also feeds on stdout (pull's merge/checkout phase writes only to stdout — huge checkouts are no longer falsely stalled). Note: as of v0.24.0 the summary pops on Pull only — the fetch summary popup of ② has been removed accordingly.
- v0.23.2 (2026-09-10): branch grouping upgraded to recursive multi-level prefix nesting — sidebar and picker alike: multi-segment prefixes nest level by level (
release/1.0/x → group release/ > subgroup 1.0/), with indentation stepping deeper each level (headers 12/26/42/58px, rows 28/44/60/76px, +16px per level, unlimited depth); grouped rows show prefix-stripped short names (remote rows also drop the remote name) so the hierarchy reads at a glance; collapse states stay remembered across sessions with backward-compatible keys.
- v0.23.1 (2026-09-10): the sidebar is now resizable — drag its right edge (170–460px, hover highlight), width remembered across sessions; the handle hides when the sidebar is collapsed.
- v0.23.0 (2026-09-10): hierarchy & readability pass (#22 full-UI geometry audit) — ① indentation everywhere: the branch picker gains three indent levels (section / top-level / prefix-header / grouped rows at 12/28/26/44px; flat in search mode), the working-copy directory groups step 12/28px, sidebar tag rows align with branch rows, and sidebar section headers get weight 600 (fixing the inverted hierarchy); ② resizable notifications: new
gitboard.notifyWidth setting (320–560, default 420) plus drag-to-resize on the notification area's left edge, remembered across sessions; ③ alignment fixes: the commit-list header and rows now share the same scrollbar-gutter source (fixing a 2–5px drift, with a regression assertion), and picker remote rows get proper spacing between name/flags; ④ compact narrow layout: below 1080px the view switcher collapses to icons; ⑤ cleanup: emoji removed from the file-page hint, font sizes converged to 5 steps (10–14px).
- v0.22.1 (2026-09-10): clearer sidebar branch-group indentation — level-1 group headers (Local / Remote·origin) → top-level branches → level-2 prefix headers → grouped branches now step in four levels (12/28/26/44px) so the hierarchy reads at a glance.
- v0.22.0 (2026-09-10): AI error diagnosis & one-click fix (#8, human-reviewed, machine-guarded) — ① failure context passthrough: failed ops now carry the git command and exit code to the UI (previously dropped at the runner layer — the most diagnostic fields were missing); ② "AI Analyze" entry on error notifications: failures raise a persistent error notification (retry + collapsible git output); when Copilot is available and the failure isn't a cancel/stall, an AI Analyze button opens the diagnosis modal in one step; ③ diagnosis modal: three-part prompt (cause / fix steps with executable git commands / prevention), streamed rendering, and URL credentials masked (
://user:token@ → ://***@) before anything is sent; ④ one-click fix with machine-enforced boundaries: diagnoses may attach a gitboard-fix JSON plan executed against a local whitelist with independent tiers run/confirm/copy — the model's self-reported tier is never trusted, --force/clean/config/unknown flags always degrade to copy-only, confirm-tier steps raise the dangerous-action dialog, and steps are executed by index with host-side re-validation against tampering (the push whitelist only gains --force-with-lease; zero new execution surface); ⑤ this release also folds in the v0.20.0 feedback-system refactor and the v0.21.0 multi-branch experience (#18/#24/#23).
- v0.21.0 (2026-09-10): multi-branch repo experience (#24, includes #23) — ① graph scope filter: an All / Local / Current segmented control switches what the commit graph draws; the new default "Local" shows local branches plus their upstreams (remote-ahead commits included), instead of drowning in remote-only branch and tag tips (
gitboard.graphBranchScope changes the default); ② branch visibility: local ⑂ / remote ⇅ chip prefixes (color-blind friendly), a highlighted HEAD chip, dimmed remote chips when a same-named local branch exists, a bolded current-branch trunk line, and "unpushed / local copy" markers in the sidebar; ③ sidebar prefix grouping (#23): local and remote branches group by the / prefix with collapsible, counted headers remembered across sessions (gitboard.branchGroupByPrefix to disable); ④ fuzzy check-out picker: a new branch picker (toolbar "Check out" button or command palette GitBoard: Check Out Branch…) with subsequence fuzzy matching and hit highlighting — local branches check out directly, remote branches ask for a local name inline; the toolbar branch filter dropdown was upgraded to the same picker (scope items included).
- v0.20.0 (2026-09-05): webview feedback-system refactor + interaction blocking design (#18) — ① commit time column fix: no more truncation at narrow widths — the column's guaranteed width is measured at runtime against the actual font (Canvas measureText, immune to font/DPI differences), degrades to a compact
MM-DD HH:mm format when space is tight (full value on hover), and the "Time" header is now right-aligned like the data; ② Notifications: bottom-right notifications replace the old toasts — icon + title + body hierarchy, level-based dwell (info 4s / success 5s / warn 8s / errors persist), stack limit of 4; operation failures no longer open a blocking dialog — they raise a persistent error notification with a Retry button and collapsible git output; success-celebration toasts are gone (progress-row flash + button flash suffice); ③ interaction blocking matrix: dependent actions block each other and explain why — commit/AI entries pre-disabled with a reason tooltip while conflicts are unresolved, push disabled while a merge is pending, in-flight toolbar buttons no longer swallow clicks (click = enqueue with dedup, hover shows "Queued · #n"), confirm dialogs disable on first click, and amend mode auto-exits when HEAD moves underneath it; ④ unified banners: conflict / pending-merge / move-detect / push-prompt / amend / compare bars all collapse into one component with five semantic variants; the push prompt now carries the sha + commit subject; ⑤ all-emoji icons replaced with linear SVG across view switcher, toolbar, progress row and file pages (consistent cross-platform rendering); ⑥ alignment audit: font sizes converge to 5 steps, panel padding on a 12px baseline, icon hit areas unified at 20px, numeric columns tabular-aligned; design tokens (spacing/type/semantic colors) land as CSS variables.
- v0.19.3 (2026-09-05): fixed "conflict resolution unresponsive" — dual op lanes and end-to-end visible feedback (#7) — ① local/net dual queues: second-scale local ops (conflict resolution, staging, discarding) no longer queue behind Fetch/Pull/Push — previously a stalled network op wedged the single serial queue forever, so conflict buttons silently queued and never ran ("clicked, nothing happened"); transient
index.lock races between lanes now retry with backoff; ② feedback on enqueue: local ops are visible in the progress row from the moment you click (queued shows "Queued · #n", switching to running when its turn comes) — no more zero-feedback windows; ③ autoFetch yields: the background auto-fetch skips its round entirely while the net lane is busy instead of competing with user actions (also fixes its dedup-registration bypass, #16); ④ optimistic conflict rows: clicking Mine/Theirs immediately switches the row to ⏳ with buttons disabled until the op settles (failures re-enable for retry), and Finish-merge enters a busy state to prevent double submits; ⑤ unified push finish: when "Pull & push" meets conflicts, completing the merge offers a confirmation bar that pushes all new commits in one go (push is always explicit, matching IDEA/SourceTree; aborting the merge cancels it). Conflict-file classification (text / NUL binaries like images & Excel / 10k-line over-limit) is now a pure function with dedicated tests, including a real-repo smoke across all three file kinds.
- v0.19.2 (2026-09-05): fixed "pull brings no commits / needs several retries" — five pull-stability hardenings (#6) — ① Pull now resolves the remote/branch from the branch config (
branch.<name>.remote/merge, native git semantics): it previously passed the local branch name as the remote-side argument, so when local and upstream names differ (e.g. branch -u origin/main master after a default-branch rename) it fetched a stale same-named remote branch and git reported "Already up to date." with exit 0 while the peer's new commits never arrived; ② Fetch/Pull/Push gained stall protection: a git-level low-speed cutoff (<1KB/s for 60s) plus a no-output watchdog (gitboard.netStallTimeout, default 180s, 0 = off) that also covers SSH remotes — stalled connections fail fast with a retry hint instead of hanging the serial op queue forever; ③ the "already up to date" notice now names the upstream (e.g. "origin/main is already up to date") so a wrong branch/remote is immediately visible; ④ repeated Fetch/Pull/Push clicks coalesce into one queued op, and ops cancelled while queued no longer execute; ⑤ post-operation quick verify (gitboard.opVerify): after an exit-0, Pull/Push/commit/checkout/reset/tag ops are checked against their intent with cheap local probes — still-behind after pull, unreached commits after push (the wrong-branch signature), unchanged HEAD after commit and similar "fake successes" now surface as a yellow warning, with probe failures fail-open; the deep tier additionally confirms Pull/Push against the remote via one ls-remote round-trip, detecting a stale fetch path (proxy/mirror serving old refs).
- v0.19.1 (2026-09-04): fixed the three filter defects (#5) — ① author filter had no effect: names with
[], commas, etc. (e.g. dependabot[bot]) were silently dropped by a character whitelist, so no --author was ever passed; validation is now relaxed and names are escaped as git basic-regex literals; ② date filter mismatched the visible range: git's --since/--until filter on the committer date while the list shows the author date, so rebased/cherry-picked repos drifted — filtering now happens on the author date (same basis as the display) with a scan-cursor based pagination; ③ new: picking a start date auto-fills the end date to match.
- v0.19.0 (2026-09-03): Quick Notes moved out into the standalone QuickNotes extension — GitBoard is a pure Git tool again and the package drops TipTap and other web-view dependencies. Note data and the default folder (
~/GitBoardNotes) are unchanged, exported HTML still round-trips; Ctrl+Alt+N and the activity-bar entry moved with the feature.
- v0.18.4 (2026-09-02): docs — full README restructure (issue-feedback section & contact info up front, changelog extracted into its own section, a dedicated Quick Notes section and a reveal troubleshooting FAQ).
- v0.18.3 (2026-09-02): "Reveal in file manager" still failed on some Windows builds (explorer's
/select parsing drifts across versions) — switched to the classic raw single-argument form (universal since XP) and added the gitboard.revealSelectStyle fallback setting.
- v0.18.2 (2026-09-01): fixed "Reveal in file manager" on paths with spaces and very long paths (>259 chars, which strict MAX_PATH systems could misreport as "file no longer exists") — added a
\\?\ existence probe and a deepest-revealable-ancestor fallback; Quick Notes got the same hardening plus a clear missing-file notice.
- v0.18.1 (2026-09-01): fixed the inverted merge-conflict "mine/theirs" pick and the wrong-side binary preview; the working-copy list widens freely and persists; "Move to…" works repeatedly; background auto-fetch gained a low-speed cutoff.
- v0.18.0 (2026-08-30): deeper note editing — live syntax highlighting in code blocks with line numbers and language chips, orthogonal sketch connectors, delete buttons for every non-text block, table-aware line numbering.
- v0.17.0 (2026-08-30): notes polish — document title header, inline images, line numbers, a draggable AI panel, centered delete confirmation, drawio-density sketch shapes, all-SVG toolbar icons.
- v0.15.0 (2026-08-30): Quick Notes added — 3-pane rich-text notes (tables / cards / code blocks / sketch board /
/ menu), Copilot AI editing, Git-independent storage, Markdown/HTML/PDF export.
- v0.14.7 (2026-08-30): startup no longer waits for Git probing.
- v0.14.6 (2026-08-29): GitHub-style graph became the default.
- v0.14.0 (2026-08-29): file history page — history follows moves/renames, any-two-version compare.
Development
npm install
npm run watch # then press F5
npm run typecheck && npm test
npm run build && npm run package
许可证 / License
MIT © 2026 Emon