给砚加一个「所有改动」页,提交前少来回点几次
改一个功能,往往要动好几个文件。提交前挨个点开 diff,看到后面的文件,又想回头确认前面那处修改。文件不多时还能记住,多起来就有点烦了。
所以这轮我给砚加了「所有改动」:把这次修改放进一个标签里,从上往下看。它和上一篇提到的行号旁改动操作一起,进了 alpha.7。
先把「改了什么」分清楚
最开始要处理的还不是排版,而是比较对象。
同一个文件,可能上午暂存了一部分,下午又改了一部分。这时拿工作区和 HEAD 比,能看到总变化,却看不出下一次提交到底会带走哪些代码。
总览页沿用了源代码管理的分组:
text
合并冲突:单独提示,回到文件处理
已暂存:HEAD → 索引
更改:索引 → 工作区
未跟踪:新文件内容
一个路径出现在两组里,是有意保留的。上面那份已经准备提交,下面那份还没放进去。合在一起看似清爽,操作起来反而容易弄错。
已经打开的文件,还会把编辑缓冲区里的修改带进视图。至于其他程序在磁盘上改了文件,什么时候更新这张总览页,后面还得专门处理。
把文件接起来以后,光标也得认路
入口放在源代码管理顶部,命令面板里也能找到「打开所有改动」。每个文件有一行标题,写路径、增删行数和所属分组。内容看完了,按回车或 z 就能折起来。
单文件 diff 已经有输出改动块的逻辑,总览页继续用它。不过只拼出文本还不够:显示出来的每一行,都要记住自己属于哪个文件、哪个改动块。否则按一下暂存,还得倒回去解析屏幕上的标题。
新建和删除文件时还碰到一个计数细节。文件以换行符结尾,拆分字符串后会多出一个空字符串,不能把它也算成一行改动。但这个处理只用于显示,文件原有的尾换行还得留着。
这类问题看着不起眼,落到界面上就是"明明三行,怎么显示新增四行"。
读 diff 时,手可以留在键盘上
我给这类只读标签加了一组翻页器式键位,不需要开启 Vim 模式:
| 操作 | 按键 |
|---|---|
| 上下移动 | j、k |
| 下一处、上一处改动 | ]、[ |
| 下一个、上一个文件 | .、, |
| 向下、向上翻页 | 空格或 f、b |
| 向下、向上翻半页 | d、u |
| 开头、结尾 | g、G |
| 展开或折叠、打开源码 | z、e |
| 暂存或取消暂存 | s |
这里最容易误解的是 s。光标在文件标题上,就操作整个文件;在普通改动块里,就操作这一块。到了已暂存组,同一个键变成取消暂存。新文件和删除文件按整文件处理。
所以它并不是"光标在哪一行就只暂存哪一行"。我宁愿把这个规则写明白,也不想让一个看似方便的快捷键偷偷扩大操作范围。
还原错了,至少还能撤销
行号旁的小框可以查看 HEAD 中的内容,也能还原或暂存当前改动。还原会改编辑缓冲区,走正常编辑事务,因此还能撤销;暂存改的是 Git 索引,得保住其他已经暂存的部分。
这两种操作离得很近,处理方式却不能混在一起。
到这里,提交前可以先在总览页看完整体,遇到需要改的地方跳回源码,再回来继续读。少了几次来回找标签,也更容易发现几个文件之间有没有漏改的地方。
但阅读过程中,文件可能还在被外部程序修改。总览页有了,并不意味着刷新问题也解决了。这笔账先记着,第 19 篇接着说。
下载试用
本文记录的是 alpha.7 阶段。下面补的是后续公开版本的下载入口,方便直接试用。
2026-10-19 补充:公开安装包为 v0.1.0-alpha.14 ,适用于 macOS 13+、Apple Silicon(M 系列芯片)。
安装包目前尚未经过 Apple 公证,首次打开的说明见发布页。
仓库留档
- 当时版本:alpha.7 发布页(位于私有源码仓库,需要访问权限);公开试用请用正文中的安装包。
- 实现:changes.go、diff.go、hunks.go。
- 测试入口:changes_test.go、hunks_test.go。本轮写稿未执行产品测试。
- 版本依据:alpha.7 发布说明。