两个提交到底差在哪:给砚补上比较和补丁导出
能在标签里读一个提交以后,还会想问:它和现在的 HEAD 差多少?这两个提交之间又改了什么?如果只要把这次改动带走,能不能直接导出补丁?
alpha.13 接着补了这些入口。底层 Git 操作继续参考 Mayoi,交互放进砚已有的提交菜单和 diff 标签。
箭头指向新版本
菜单里有「HEAD → 此提交」和「此提交 → HEAD」,也可以先选一个提交作为起点,再去另一个提交发起比较。
箭头左边是旧内容,右边是新内容。方向反过来,新增和删除也会反过来,批注自然不能两边混用。
这里我特意保住了一个细节:打开比较时,先把两端解析成完整哈希,再保存到标签里。后面切分支或者又提交了代码,已经打开的比较仍然看原来那两份内容。
不然标签还挂着“HEAD”,内容却跟着变了,人读到一半很难发现比较对象已经换过。
历史内容只能按历史来读
比较标签沿用单栏、并排、折叠和翻页键,也能留批注。但历史里的行号,不能直接当作工作区文件的行号去编辑,更不能在这里暂存一段旧 diff。
标签恢复时要记住仓库、两端版本、所在列、光标和滚动位置。如果对象已经被清理,或者仓库被移走,就显示错误。拿一个“差不多”的当前版本顶上去,反而会误导人。
重命名和二进制文件也给出明确表示。对于合并提交,仍按第一个父提交解释改动,这个比较范围需要保留。
补丁带走的是改动,不是红绿颜色
提交菜单里新增导出和复制补丁。普通提交对第一个父提交,根提交对空树,二进制内容也包含在内。
调用 Git 时关闭终端颜色、外部 diff 和文本转换。人平时配置的漂亮输出,未必适合作为后续应用的补丁。
图形版走系统保存对话框;终端版输入新路径,目标已存在就拒绝覆盖。取消以后不留下半份导出文件。
源码测试里也分别准备了根提交、合并、二进制、反向比较等仓库场景。这个功能如果只拿一处文本修改试一下,很容易把少见情况漏掉。
顺手把“复制提交号”也补了
在提交元信息行按回车或双击,就能复制完整哈希。“显示所有分支”也会随会话保存,不必每次重新打开。
远端入口支持 GitHub、GitLab 和 Bitbucket。拼链接前去掉凭据、查询参数和片段,再选定仓库远端;不认识的托管服务就报清楚,不猜地址。终端版把链接复制出来。
这一轮补完后,历史标签可以多留一会儿:先固定两份代码,看完差异,留下意见,必要时导出补丁。切换当前分支,不会把正在读的那份比较也一起改掉。
下载试用
本文功能进入 v0.1.0-alpha.13,可以下载对应版本体验。
下载地址核对于 2026-10-19。安装包适用于 macOS 13+、Apple Silicon,目前尚未 Apple 公证,首次打开说明见发布页。
仓库留档
- 实现与设计:docs/commit-tools.md、core/git/commitactions.go、core/app/commit_tools.go。
- 测试入口:core/git/commitactions_test.go、core/app/commit_tools_test.go、ui/gui/commit_tools_test.go。本轮只核对源码、历史报告与发布信息,没有重跑产品测试或安装包。