回到首页

输入关键词,多个关键词用空格分隔。

← AI Work · 系列目录

【AI Work】02 把 Git 留在会话旁边:WDX Git

约 5 分钟
本页目录

用 DSH 写代码的人大概都有过这个瞬间:AI 说「改好了」,你看了一眼 diff,觉得没问题,然后切到终端——git status、git add、git commit、git pull、git push。每一步都不难,但每切一次窗口,刚才脑子里的上下文就掉一截。等提交完回来,已经想不起下一步要让它改什么了。

AI 把写代码这件事变快了,但「改完到提交」这段路还是老样子。我也试过 GitHub Desktop,它确实比命令行顺手,但它是一个独立 App:你还是要在两个窗口之间来回看,还是得自己判断 AI 到底改了哪几个文件,提交信息也还是得自己写。

所以我把这段路搬进了 DSH 的右栏,做了 WDX Git。

WDX Git 提交页

省流版

  • 顶栏只有一个同步按钮,按仓库状态显示 Fetch origin / Pull origin / Push origin / Sync / Publish branch
  • 打开面板先看到提交页,改动默认全选
  • AI 读本次要提交的 diff 写提交信息,快速和详细两档
  • 变更、diff、历史、分支、stash、冲突都在面板里解决
  • 不 force push,不自动 rebase,不改写历史

一个按钮,但不是一把梭

Git 的日常操作其实只有几种状态:本地和远端一样、只落后、只领先、两边都有新提交、还没有 upstream。以前这些状态要靠 git status 和 git log 自己拼出来,再决定先 pull 还是先 push。现在顶栏按钮直接显示「点下去主要会发生什么」:

仓库状态按钮
已同步Fetch origin
只落后远端Pull origin
只有本地提交Push origin
两边都有新提交Sync
没有 upstreamPublish branch

点下去之后,面板内部会依次做:fetch --prune、补 upstream、快进或合并、需要时推送。需要合并时,工作区有改动会先自动 stash,合并完再恢复;push 被远端拒绝时,fetch + merge + 重试一次,再失败就把 git 的错误原样告诉你。冲突一定停下来,不会偷偷提交。

这也是我理解的「自动化」边界:可以替你跑流程,但不能替你承担改写历史的后果。

提交页先出现,改动默认全选

很多 Git 工具打开时落在「变更」页,你得先 review 一遍再切到提交页。我的习惯正好相反:AI 改完,我通常已经看过 diff 了,打开面板就是来提交的。所以 WDX Git 默认打开提交页,Summary、Description、AI 区和提交按钮一次排开。

改动默认全选。这一点和大多数工具不一样,但符合 AI 协作的实际情况:一次会话改五六个文件是常态,逐个勾选纯属浪费。不想提交的文件,去「变更」里取消勾选就行;提交时只暂存选中的路径,取消的文件留在工作区。

提交历史

提交页左侧的提交者图标,用的是 wdxtub-blog 的 W 标记,不读 DSH 账户头像,也不读 GitHub 头像。倒不是洁癖,只是提交面板离「身份」太近,展示头像容易让人误会你在拿账号做什么。

AI 写提交信息,但不替你提交

提交信息是我最不想手写的部分,尤其是改了十几个文件之后。WDX Git 的 AI 只做一件事:读本次待提交的 diff、文件列表、最近几条提交标题和当前分支,按仓库已有的风格写一条消息。

  • 快速:一句话 Conventional Commit,适合日常小改动
  • 详细:补充原因、行为变化、限制和验证信息,适合需要留痕的提交

默认跟随当前会话的模型,思考等级自动压低;嫌贵可以在设置里换成更便宜的模型。它只看本次会提交的内容:取消勾选的文件不会出现在 diff 里,未跟踪的文本文件也只在详细模式下按需读取。

AI 只生成文字。commit、push、解决冲突,最后一步都由你点。这个边界是故意的:提交信息写错了可以改,历史写错了就麻烦了。

冲突不硬来

同步遇到冲突会停下来,面板里可以看 ours 和 theirs 的差异,也可以直接取当前分支或对方分支。AI 生成合并建议时只预览,确认后才写入文件;手工改完点「标记为已解决」继续。中止、继续 merge、rebase、cherry-pick、revert 也都在面板里。

解决冲突

为什么是一个 DSH 插件

DSH 的插件分 Host 和 Client 两半。Host 跑在 Node 里,负责 git 子进程、同步状态机和模型调用;Client 是浏览器 bundle,只画界面。两边通过 POST /api/wdx-git 走一套很小的 RPC,错误码和数据结构都写在 PROTOCOL.md 里。

这样做的好处很实际:不用另起进程,不用打包 Electron,颜色直接复用 DSH 的主题 token,深浅色自动适配;git 凭据、代理、hooks 都还是你本机那一套。macOS 上还会自动读取系统代理,Finder 启动的 DSH 也能正常 fetch / push——这个点看起来小,但 GUI 进程拿不到 shell 里的代理变量时,真的很烦。

代价也有:DSH 改版时客户端注入点可能变,Host 代码更新要重开 DSH 才会重新加载。这是插件形态的固有成本,只能认。

刻意不做的事

  • 不 force push,不自动 rebase,不改写提交历史
  • 不绕过 hooks,不做 commit signing
  • 不做 hunk 级 / 行级 partial staging,只到文件级
  • 不做远端选择 UI,多远端时优先 origin
  • 不在后台自动提交,也不替你决定冲突

这些不是没做完,是想清楚之后不做。Git 面板最怕「聪明」,一次错误的历史改写,比十次多点一下的代价大得多。

安装

侧栏 插件 → 添加插件,输入 dsh-wdx-git,安装源选 npm 官方源,装好后点「立即启用」。插件面向 DSH 0.2.x;装完刷新页面,有两个入口:会话头部工具栏的 Git 分支图标,或者右栏的 + → 开始 → WDX Git。

源码、协议和测试在 GitHub,npm 包是 dsh-wdx-git。当前 45 个测试,覆盖同步状态机、冲突、代理和 AI 提交信息。

WDX Git 不想替代 Git,也不想变成另一个 GitHub Desktop。它只想把「改完到提交」这段路缩短到看一眼、点一下。剩下的判断,还是留给人。

相关文章