关于 gitwand
GitWand 是基于 Tauri 2 与 Vue 3 构建的原生 Git 客户端,内置自动解决简单合并冲突的引擎。它面向需要与 AI Agent 协作的开发者,提供 PR 审查、Agent 会话和 MCP 服务。
主要功能
- 01自动解决可简单处理的合并冲突
- 02合并预览与逐文件风险分析
- 03Git Tree 历史视图与 diff 查看器
- 04多平台 PR 管理与内联代码审查
- 05命令行与 MCP 服务支持冲突解决
适用场景
- 01合并分支前预判冲突的解决难度
- 02让 Agent 只处理复杂的冲突片段
- 03在 CI 中以 JSON 输出冲突解决结果
MCP 相关
GitWand 提供 @gitwand/mcp 服务,向 MCP 客户端暴露冲突状态查询、自动解决和合并预览等工具;桌面应用的 Agent 面板也可显示活动的 MCP 会话。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
7收录的工具列表 · 更新于 1 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| cwd | string | 否 | 工作目录(仓库根目录)。默认为服务器 cwd。 |
| regenerate | boolean | 否 | 如果为 true,则针对任何被拒绝的生成文件(例如 package-lock.json),报告 GitWand 的 regenerate-tier 计划(锁文件生态系统及当前是否可运行),并重用本次调用已计算的相同文件状态。仅供报告——此操作绝不执行任何内容(不会启动进程、创建 worktree,也不会写入此工具在未设置该标志时不会写入的文件)。要实际应用计划,请运行 `gitwand resolve --regenerate`(CLI)。默认值:false。 |
| min_confidence_score | number | 否 | 仅应用置信度分数 >= 此值(0-100)的解决方案。此值与策略自身的标签阈值共同生效,绝不取代该阈值:提高此值只会减少应用的解决方案,不会增加,因此绝不会放行引擎已拒绝的代码块。省略时使用仓库的 .gitwandrc minConfidenceScore,或不设阈值。 |
详细介绍
GitWand
快速、原生的 Git 客户端,内置智能冲突解决功能
桌面应用 • 冲突解决引擎 • CLI • MCP 服务 • 架构 • 路线图 • 代码签名
GitWand 是一款使用 Tauri 2 和 Vue 3 构建的轻量级原生 Git 客户端,涵盖日常工作流的全部环节——更改、历史记录、分支、推送/拉取,并提供更多功能:自动解决简单的合并冲突、带行内评论的集成 PR 代码审查,以及作为主要历史视图的 Git Tree。从 v1.3 起,AI 会协助工作流的每个步骤,包括分支命名、PR 撰写、代码块级审查、语义化压缩和自然语言提交搜索。v2.7+ 增加了多仓库工作区和 Worktree;v2.8 增加了 Agent 会话(MCP);v2.9 增加了跨仓库 Launchpad;v2.10 为 GitHub、GitLab、Bitbucket 和 Azure DevOps 带来了多平台代码托管服务的拉取请求;v2.13 增加了行内 AI 代码审查;v2.18 将 CI 检查注释直接叠加到差异视图上;v2.19 增加了 GitHub 和 Azure DevOps 的 OAuth 设备流登录(无需 gh CLI)以及跨 Fork 拉取请求。3.x 系列让 GitWand 成为 AI 辅助工作的日常主力:v3.0 将跨仓库仪表板改为今日页面,即经过分类的操作收件箱,并在 Marketplace 上发布了 VS Code 扩展;v3.2 增加了集成终端和 AI Agent 标签页,包括在隔离 Worktree 中一键执行 AI 任务,以及可停靠的文件浏览器 / 编辑器面板。
桌面应用
Git Tree
Git Tree 是主要的历史视图——完整分辨率的 DAG,会将分支拓扑渲染为 SVG,并支持主干固定、泳道冷却、WIP 节点和引用徽标。点击任意提交即可查看其差异;右键可检出、重置、创建分支、打标签或挑选提交。分支、储藏和标签都可在此管理,无需单独的面板。筛选模式(v3.2)会重新计算 DAG,仅显示匹配的提交,并提供快速分支/作者切换、按日期分组的分隔符、分支名称自动补全,以及可直接解析到 PR 分支的 #<PR number> 查找。
仓库视图
侧边栏中显示已暂存、未暂存、未跟踪和冲突文件,主区域内显示行内差异。无需离开界面即可暂存、取消暂存、丢弃和提交。支持按行或代码块进行部分暂存。
提交工作流
包含摘要和描述字段、可选的提交签名,以及 Ctrl+Enter 快捷键。未推送的提交可直接在 Git Tree 中修改——悬停时会显示铅笔图标,点击后打开预填现有消息的浮层。
分支
点击标题中的分支名称即可搜索、切换、创建或删除分支。使用专用的合并按钮合并任意分支。每个非当前分支都会显示一个合并预览按钮,可在提交前模拟合并结果。
合并预览
合并分支前,GitWand 会使用 git merge-base、git show 和 git merge-file -p --diff3 预测合并结果,不会改动工作树。结果会按文件显示明细:
- 可自动解决 — GitWand 可以自动处理
- 部分可解决 — 部分代码块需要手动解决
- 手动解决 — 复杂冲突,需要人工判断
- 添加/删除 — 一侧添加了文件,另一侧删除了文件
徽标会汇总整体结果:Clean merge、100% auto-resolvable 或 N conflicts to review。
推送与拉取
一键推送和拉取,并通过徽标计数显示领先/落后提交数。自动获取会在后台每 30 秒运行一次。
差异查看器
可切换并排或内联视图,设置会跨会话保留。支持 30 多种语言的语法高亮、基于 LCS 的词级差异、可折叠的未更改区域、画布缩略图、代码块导航(上一个/下一个)以及双列行号。
文件历史记录与责备信息
通过 git log --follow 查看完整文件历史记录,按提交分组的责备信息视图,以及比较文件任意两个版本的时光穿梭差异。
仓库切换器与工作区
点击标题中的当前仓库名称,会打开一个下拉菜单,显示最近打开的仓库。可固定收藏项并即时切换,无需使用文件选择器。工作区(v2.7)可将多个仓库归入一个仪表板,提供跨仓库状态、协调推送/拉取以及快速创建工作树(⌘⇧N)。每个项目标签页都带有一个工作树子菜单(v3.2),列出 main 和所有工作树;选择一项即可就地切换该项目的检出内容,无需额外标签页。
今日
今日(⌘L;v2.9 中以 Launchpad 名称推出,v3.0 中重新设计)是一个跨仓库的分类待办收件箱:汇集所有进行中的事项——WIP、PR、Issue、团队事项——按紧急程度分级排列,每一行都带有基于状态的主要操作(合并 · 审查 · 解决 · 回复 · 查看失败)。可固定或延后任何事项;对于大型工作区,团队标签页会延迟加载,以提升性能。
拉取请求与代码审查
无需离开应用,即可浏览、创建、检出和合并 GitHub、GitLab、Bitbucket 和 Azure DevOps 上的拉取/合并请求。GitWand 会根据远程仓库自动检测代码托管平台并路由到相应提供商;只需在设置中管理一次账户。PR 列表位于侧边栏,完整详情——差异、CI 检查、评论、行内审查——则显示在主区域。
- 使用 OAuth 登录 — “使用 GitHub 登录”和“使用 Azure DevOps 登录”使用 OAuth 设备流程;令牌存储在操作系统钥匙串中,GitHub PR 工作流通过 REST API 无需令牌也能运行,不需要
ghCLI(未配置令牌时仍可使用 CLI 路径) - 跨 Fork 拉取请求 — 当
origin是 Fork 时,可直接针对上游父仓库创建 PR(默认),并可在列表中看到提交到上游的 PR,以及 Fork 自身的 PR - 行内评论 — 阅读和撰写锚定在差异行上的审查评论,支持完整的线程和代码建议(一键应用
```suggestion ```代码块) - 行内 CI 检查注释 — 失败检查的注释会叠加显示在差异上,带有边栏图标(❌/⚠/ℹ)和悬停提示;侧边栏会显示每个文件的计数(GitHub、GitLab 和 Bitbucket)
- 提交审查 — 批准/请求更改/评论,并提供草稿队列,可先累积评论再发送
- 🧠 智能分析面板 — 冲突预测(合并前运行
git merge-tree)、热点分析、审查范围、静态 AI 建议、文件审查历史记录
Agent 会话
Agent 面板(v2.8)会显示活跃的 MCP 会话,并允许你直接从 GitWand 启动 Claude Code——Agent 所做的更改会实时显示在差异查看器中。MCP 目录(Settings > MCP)支持一键安装任意 MCP 服务。
集成终端与 AI 任务
终端面板(v3.2)通过 WebGL 渲染,支持内联搜索(Ctrl+F)、可点击链接和带类型的标签页 — shell、claude、codex — 每种类型都有自己的图标和未读输出提示点。“Launch Claude Code” / “Launch Codex”会打开一个真正的 PTY 标签页,而**“New AI task”只需单击即可创建一个临时 git 工作树,并在其中打开 Claude Code 标签页 — Agent 会在隔离环境中工作,完成后,你可以从项目标签页的子菜单中将工作合并回来或删除该工作树**。通过 shell 可执行文件白名单、对所有文件系统操作使用 safe_repo_path(),以及防止 PTY 孤儿进程来加强安全性。
文件资源管理器 / 编辑器
可停靠的文件面板(v3.2,支持拖动/调整大小/全屏)通过 git ls-files 列出完整的仓库树,并识别 gitignore 规则;打开的文件会在延迟加载的 CodeMirror 6 编辑器中显示,支持语法高亮、每个标签页独立的撤销历史,以及锁定/撤销/保存工具栏。可通过 AppDock 中的 Files 磁贴访问,并为每个仓库保存布局设置。
设置
语言(英语、法语、西班牙语、巴西葡萄牙语、简体中文 — 自动检测操作系统语言)、主题(深色/浅色/系统)、提交签名、差异模式、外部编辑器、Git 二进制文件路径,以及切换行为(暂存/询问/拒绝)。AI 提供商涵盖 API 后端(Claude / OpenAI-compatible / Ollama)和本地 CLI Agent(Claude Code、Codex、opencode、GitHub Copilot CLI),每种类型都有自己的模型选择器。账户用于管理代码托管平台的登录 — GitHub 和 Azure DevOps 支持 OAuth 设备流程,其他平台则支持应用密码/CLI。所有设置都会保存到应用设置中。
安装
从 GitHub Releases 下载适用于你平台的最新构建:
- macOS —
.dmg(通用版:Apple Silicon + Intel,经 Developer ID 签名并由 Apple 公证) - Linux —
.AppImage或.deb - Windows —
.msi或.exe
在 Windows 上,也可以通过 winget 安装:
winget install Devlint.GitWand
从源代码运行
git clone https://github.com/devlint/GitWand.git
cd GitWand
pnpm install
# Browser dev mode — no Rust needed
cd apps/desktop && pnpm dev:web
# Tauri desktop mode — requires Rust toolchain
# Install Rust: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source "$HOME/.cargo/env"
# Desktop Dev Build (In the apps/desktop/ folder)
pnpm --filter desktop tauri dev
# On linux you may have to run
WEBKIT_DISABLE_COMPOSITING_MODE=1 pnpm --filter desktop tauri dev
冲突解决引擎
GitWand 的核心引擎(@gitwand/core)会自动解决简单的 Git 合并冲突。它绝不会处理复杂或含糊不清的冲突块。
解决模式
GitWand 使用模式注册表——分类器按优先级顺序评估模式,每个模式都会声明是否需要 diff3(有基准版本)、diff2,或两者皆可。
注册表包含 12 个模式,其中 8 个会自动应用。其余四个要么会提出供你确认的解决方案,要么需要选择启用,要么会原样交还冲突块。
| 模式 | 优先级 | 自动应用 | 描述 | 典型置信度 |
|---|---|---|---|---|
| same_change | 10 | 是 | 两个分支做出了完全相同的编辑 | 确定 |
| delete_no_change | 20 | 是 | 一侧删除了代码块,另一侧未作改动 | 确定 |
| one_side_change | 30 | 是 | 只有一个分支修改了代码块 | 确定 |
| non_overlapping | 40 | 是 | 在代码块的不同位置添加内容 | 高 |
| whitespace_only | 50 | 是 | 逻辑相同,但缩进或空格不同 | 高 |
| reorder_only | 55 | 是 | 行内容相同、顺序不同,纯粹是重新排列 | 高 |
| insertion_at_boundary | 57 | 是 | 两侧仅有插入内容,基准版本保持不变 | 高 |
| value_only_change | 60 | 是 | 两侧都修改了同一个标量(版本、哈希、时间戳) | 高到中 |
| token_level_merge | 65 | 否,提出方案 | 同一行上有互不重叠的词元编辑,合并为供你确认的方案 | 中 |
| refactoring_aware_merge | 970 | 否,选择启用 | 检测到重命名或移动,并在冲突中重放相应更改 | 高 |
| llm_proposed | 998 | 否,选择启用 | 模型提出解决方案,并在合并后进行验证 | 中 |
| complex | 999 | 否 | 编辑内容重叠,始终会显示完整追踪记录 | 低 |
置信度列仅供参考:每个冲突块都会携带计算得出的 ConfidenceScore(见下文),而非固定标签。例如,value_only_change 会根据易变词元占总词元数的比例评分,低于阈值时会直接拒绝处理该冲突块。
非注册表模式:generated_file 是一个独立的重新分类步骤,会在分类后运行。当冲突块的路径与生成文件 glob 匹配时(锁文件、打包文件、dist/,以及 generatedFiles 中的所有内容),解决器会将其重写为 generated_file,并默认给出可执行的原因后拒绝处理,而不是猜测——对 1,662 次真实合并的测量表明,在几乎所有情况下,自动合并生成文件的结果都与团队实际发布的内容不一致。GitWand 会提示你先解决源文件,再重新运行安装程序或构建流程。使用 .gitwandrc 中的 resolveGeneratedFiles: true 或 gitwand resolve --resolve-generated,即可重新启用旧版的接受对方更改/语义合并行为。generated_file 会出现在 ConflictType 中,但从不属于分类器注册表。
综合置信度分数
每个解决结果都带有一个 ConfidenceScore 对象,而不是简单的标签:
{
score: 84, // 0–100 composite score
label: "high", // "certain" | "high" | "medium" | "low"
dimensions: {
typeClassification: 90, // certainty of the detected pattern
dataRisk: 20, // risk of data loss if auto-resolved
scopeImpact: 10, // impact of change size
},
boosters: ["Path matches generated-file pattern: lockfile"],
penalties: ["Content will be regenerated — theirs assumed more recent"],
}
(所示结构适用于 resolveGeneratedFiles: true 时的 generated_file 冲突块——默认情况下,GitWand 会拒绝处理生成文件,而不是为其评分并应用解决方案;参见上面的模式表。)
评分公式:score = typeClassification − dataRisk×0.4 − scopeImpact×0.15
格式感知型解决器
对于结构化文件,GitWand 会先使用语义解决器,再回退到文本匹配:
- JSON / JSONC — 使用
JSON.parse/JSON.stringify逐层按键合并。可处理嵌套对象,检测无法解决的标量冲突,并去除.jsonc中的注释。 - Markdown — 按 ATX 标题(H1–H6)进行分节合并。合并彼此独立的章节;如果同一章节在两侧都被修改,则回退到文本方式。
可配置的合并策略
在项目根目录创建 .gitwandrc 文件以定义解决策略:
{
"policy": "prefer-merge",
"patternOverrides": {
"*.lock": "prefer-theirs",
"src/generated/**": "prefer-theirs",
"CHANGELOG.md": "prefer-ours"
}
}
可用策略:prefer-ours、prefer-theirs、prefer-safety、prefer-merge、strict。
决策追踪记录
每个分类步骤都会记录在 DecisionTrace 中,便于审计和调试:
✓ src/config.ts — 3/3 resolved
L12 [one_side_change] certain — Only the incoming branch modified this block.
L25 [same_change] certain — Both branches made the exact same edit.
L41 [value_only_change:json] high — Scalar value updated on one side (version field).
CLI
# Use directly with npx
npx @gitwand/cli resolve
# Or install globally
npm install -g @gitwand/cli
gitwand resolve # Resolve all conflicted files in the repo
gitwand resolve --dry-run # Preview without writing
gitwand resolve --verbose # Detailed decision trace
gitwand status # Show conflict status per file
gitwand resolve --ci # CI mode: JSON output + semantic exit codes
丰富的 JSON 输出
--ci / --json 标志会返回一份完整的结构化报告,其中包含综合置信度评分、决策轨迹,以及供大模型辅助解决的待处理代码块:
{
"version": "0.1.0",
"timestamp": "2026-04-14T12:00:00.000Z",
"summary": {
"files": 2,
"totalConflicts": 5,
"autoResolved": 4,
"remaining": 1,
"allResolved": false
},
"files": [
{
"path": "src/config.ts",
"totalConflicts": 3,
"autoResolved": 3,
"remaining": 0,
"validation": {
"isValid": true,
"hasResidualMarkers": false,
"syntaxError": null
},
"resolutions": [
{
"line": 15,
"type": "one_side_change",
"resolved": true,
"explanation": "Only one side modified this block",
"confidence": {
"score": 95,
"label": "certain",
"typeClassification": 100,
"dataRisk": 5,
"scopeImpact": 10
},
"trace": {
"selected": "theirs",
"hasBase": true,
"summary": "One-side change detected — incoming accepted.",
"steps": ["..."]
}
}
],
"pendingHunks": []
}
]
}
pendingHunks 数组为 AI Agent 和 CI 脚本提供了处理 GitWand 无法自动解决的冲突所需的一切信息——ours/theirs/base 内容、分类轨迹和置信度明细。
MCP 服务
GitWand 提供一个 MCP(Model Context Protocol)服务,将其冲突解决引擎开放给 AI Agent 使用——包括 Claude Code、Claude Desktop、Cursor、Windsurf,以及任何兼容 MCP 的客户端。
设置
将以下内容添加到 MCP 客户端配置中(例如 claude_desktop_config.json 或 .claude/settings.json):
{
"mcpServers": {
"gitwand": {
"command": "npx",
"args": ["-y", "@gitwand/mcp"]
}
}
}
服务默认使用客户端的工作目录。若要将其固定到特定仓库,请在 args 数组中添加 "--cwd", "/absolute/path/to/repo"。使用 Claude Code 时,可通过一行命令完成安装:
claude mcp add gitwand -- npx -y @gitwand/mcp
工具
| 工具 | 说明 |
|---|---|
gitwand_status | 列出存在冲突的文件及其复杂度和可自动解决性 |
gitwand_resolve_conflicts | 自动解决简单冲突,并返回 DecisionTrace + pendingHunks |
gitwand_preview_merge | 试运行解决过程——提供统计信息和风险评估,但不写入文件 |
gitwand_explain_hunk | 说明特定代码块为何被归类为该类型(完整轨迹 + 上下文) |
gitwand_apply_resolution | 将自定义(由大模型提供的)解决方案应用到特定的复杂代码块 |
gitwand_resolve_hunk | 请求连接的 Agent 为一个待处理代码块提出解决方案(返回 ours/theirs/base + 轨迹) |
gitwand_resolve_hunk_llm | 通过合并后检查验证大模型提出的解决方案,然后将其写入磁盘 |
资源
| URI | 说明 |
|---|---|
gitwand://repo/conflicts | 当前冲突状态——文件、数量、类型 |
gitwand://repo/policy | 当前生效的 .gitwandrc 配置 |
gitwand://hunk/{file}/{line} | 特定冲突的原始代码块内容 |
人类 ↔ 大模型协作循环
MCP 服务支持一种高效的工作流:GitWand 自动处理简单冲突,大模型负责处理复杂冲突:
- 大模型调用
gitwand_preview_merge— 查看存在多少冲突,以及 GitWand 能处理多少 - 大模型调用
gitwand_resolve_conflicts— GitWand 自动解决简单冲突,并为其余冲突返回pendingHunks - 大模型读取
pendingHunks— 每项都包含 ours/theirs/base 内容和完整的决策轨迹 - 大模型为每个待处理代码块调用
gitwand_apply_resolution— 直接写入解决方案
Claude Code 斜杠命令
GitWand 还为 Claude Code 提供 .claude/commands/:
/resolve # Full conflict resolution workflow
/preview # Merge preview and risk assessment
架构
gitwand/
├── packages/
│ ├── core/ @gitwand/core — Resolution engine (TypeScript, browser-safe)
│ │ parser, resolver, classifier, format resolvers,
│ │ confidence scoring, tree-sitter structural dispatch
│ ├── cli/ @gitwand/cli — Command-line interface
│ ├── mcp/ @gitwand/mcp — MCP server (stdio transport)
│ │ tools (7), resources (3), Claude Code commands
│ └── vscode/ VS Code extension — CodeLens, diagnostics, status bar
├── apps/
│ └── desktop/ Tauri 2 + Vue 3 desktop app
│ src-tauri/ Rust backend (git commands, IPC, libgit2)
│ src/ Vue frontend (stores, composables, panels)
└── .claude/
└── commands/ Claude Code slash commands (/resolve, /preview)
核心引擎与框架无关,可作为库使用:
import { resolve } from "@gitwand/core";
const result = resolve(conflictedContent, "src/app.ts");
console.log(`${result.stats.autoResolved}/${result.stats.totalConflicts} resolved`);
// With options
const result = resolve(content, "package.json", {
policy: "prefer-merge",
minConfidence: "medium",
patternOverrides: { "*.lock": "prefer-theirs" },
});
开发
git clone https://github.com/devlint/GitWand.git
cd GitWand
pnpm install
pnpm build # Build all packages
pnpm test # Tests across all workspaces
运行基准测试
cd packages/core
pnpm test:bench # vitest bench — ops/s per fixture size
Apple M 系列设备上的基准结果:
| 输入 | 吞吐量 |
|---|---|
| 1 个冲突 / 约 30 行 | 约 249 000 ops/s |
| 5 个冲突 / 约 140 行 | 约 40 000 ops/s |
| 50 个冲突 / 约 1350 行 | 约 4 500 ops/s |
| 支持 JSON/Markdown 格式识别 | 约 137 000 ops/s |
国际化
GitWand 使用零依赖、类型安全的 i18n 系统,支持五种语言:英语(en,默认)、法语(fr)、西班牙语(es)、巴西葡萄牙语(pt-BR)和简体中文(zh-CN)。en.ts 是规范参考,使用 as const 定义;Locale 和 LocaleKey 类型由此派生,因此其他每种语言都必须与其结构一致——TypeScript 会强制执行这一点。useI18n() 组合式函数提供 t(key, ...args),支持点分键解析和位置插值。系统会自动检测操作系统语言;用户可以在设置中更改语言。
路线图
完整的分阶段计划见 ROADMAP.md,其中包含即将推出的功能、竞争分析和已发布版本历史。
代码签名政策
GitWand 的 Windows 版本经过代码签名。免费代码签名由 SignPath.io 提供,证书由 SignPath Foundation 提供。
| 角色 | 成员 |
|---|---|
| 提交者 / 审阅者 | Laurent Guitton |
| 批准者 | Laurent Guitton |
除非用户明确要求,否则本程序不会向其他联网系统传输任何信息。
许可证
MIT — Laurent Guitton
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。