给砚加一个「所有改动」页,提交前少来回点几次

给砚加一个「所有改动」页,提交前少来回点几次

改一个功能,往往要动好几个文件。提交前挨个点开 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 公证,首次打开的说明见发布页。


仓库留档

相关推荐
小满zs14 小时前
Go语言第十八章(架构设计)
后端·go
FungLeo1 天前
成为全栈·Go 后端篇·三轮代码审阅之后:把可读性和证据做成工程规则
golang·go·ast·静态检查·成为全栈·代码审阅
我不会起名字3222 天前
Redis 从 0 到 1(二十八):Redis 抖一下,重试把它打挂了——超时/重试/熔断的 Go 封装
redis·go·超时·熔断·重试
xyzzklk2 天前
变相解决华为Mate 8锁屏后无法建立入站网络连接
linux·运维·服务器·网络·华为·go·安卓
vipxieliang3 天前
语言对比卡:PHP vs Go vs Java 的优缺点、适用场景与「为什么选 PHP」
java·go·php
我不会起名字3224 天前
Redis 从 0 到 1(二十七):JSON 体积是 Protobuf 的 3.7 倍?3 种序列化的 Go 基准测试
redis·go·序列化·protobuf·messagepack
我不会起名字3224 天前
Redis 从 0 到 1(二十三):一个热 key 打到 10 万 QPS——hotkey 与本地缓存的 Go 实现
redis·缓存·go·qps·hotkey
Patrick_Wilson4 天前
Go 为什么需要 defer?从函数怎么收尾说起
后端·go·编程语言
Patrick_Wilson4 天前
从文本输出理解 Go 方法与接口
后端·go·编程语言
Patrick_Wilson4 天前
读懂一个 Go JSON 处理函数:从输入数据追踪结构体、校验与错误返回
go·json·编程语言