mrsaynothing.dev
Jujutsu v0.46 评测:变了什么,谁该动手

> Jujutsu v0.46 评测:变了什么,谁该动手▋

两周后的第二次 jj 阅读:v0.46.0 带来 worktree 共置,记录涨了 216 颗星,undo 的差距继续拉大。变了什么,什么会坏,谁该动。

mrsaynothing· 2026年10月13日· 2 分钟读完 最后验证 2026-10-13

两周前,本站第一次读 jj 的记录,称它为git 从未有过的 undo 按钮——31 796 颗星,月度发布,一本操作日志。今天第二次阅读:32 012 颗星(两周 +216),v0.46.0 六天前发布,仓库在今早 05:22 UTC 被 push——水壶还没烧上。

诚实线,和上次一样:我读的是记录,没有跑过工具。下面一切来自 v0.46.0 发布说明、仓库的公开记录和我们的第一次阅读。第二次阅读多出来的,是第一次不可能有的东西:差值。两周的发布、两周的星、两周的站内搜索数据,堆在同一道问题后面。

还有本文拒绝的谎言:版本号就是新闻。大多数 point release 只是管道工程。v0.46.0 不是——它改写了切换的算术,而这两周的需求数据说明,这比 changelog 承认的更重要。

Jujutsu v0.46 变了什么?workspace 现在可以通过真正的 git worktree 共置(jj workspace add --colocate),jj undo/jj redo 默认拒绝跨 workspace 操作,jj bisect run 会先检查自己的端点,最低 git 要求升到 2.42.0。共置仓库在 GitHub 和同事眼里仍是普通 git 仓库。

两周记录

先看数字——这是本文唯一没人能争辩的部分。

度量第一次阅读(9 月 29 日)第二次阅读(10 月 13 日)
GitHub 星标31 79632 012(+216 / 14 天 ≈ 15/天)
最新发布v0.45.1(9 月 3 日)v0.46.0(10 月 7 日——间隔 34 天)
仓库最后 push活跃今早 05:22 UTC
开放 issue—1 260

星是虚荣,节奏是信号:六周内两次发布、breaking changes 列得清清楚楚,这是一个既交付又告诉你它弄坏了什么的项目。1 260 个开放 issue 同理——一个还在动的工具,不是一个完工的工具。

我们自己的账本带着第二个信号。本月 git 集群里最大的展示来源依旧是撤销 commit 但保留改动——展示量周环比涨 100%,点击却几乎为零,因为诚实的 git 答案埋在三层命令深处,读者看得出来。对 undo 的需求没有等 jj。它从来不等。

Jujutsu vs git:undo 对照表

第一次阅读讲了模型——工作副本本身就是一个 commit,每次操作都写进操作日志,冲突是一等公民。它没讲的、而搜索数据显示人们凌晨六点真正需要的,是那张逐句的表:活儿,按搜索者的打法打出来,两种方言都收。

git:refs 赌局 commit ← commit ← commit 分支指向顶端 undo = 挪动指针, 祈祷挪对了 shard reflog · ORIG_HEAD · reset --soft 三个工具,一件事,零保证 jj:操作日志 op 412 ← op 411 ← op 410 每条命令追加一条记录 undo = 后退一条记录 redo = 再前进一条 jj op log · jj undo · jj redo 一个工具,一件事,全程在案
底下是同样的提交。差别在第二本账:git 记得 ref 指过哪里;jj 记得你做过什么。
活儿git(咒语)jj(操作)
撤销我上一步reflog,眯眼,reset --soft 或 reset --keepjj undo
撤销撤销没有干净的路jj redo
看看刚才发生了什么git reflogjj op log
修订最后一个提交git commit --amend改文件——工作副本提交自己修订自己
把冲突留到以后不允许——现在解决,或者停下冲突就是提交;想什么时候解决都行

在 git 里,撤销是考古——刨开 reflog,找到碎片,重新拼装。在 jj 里,那盘磁带从没被埋过:撤销就是对操作日志的一次操作。考古对倒带按钮。

想象一下:git 给你的是飞行记录仪——装在机尾,坠机后才能读。jj 把它装上了仪表盘,还接了一个倒带按钮。

v0.46.0:两个真正重要的变化

能通过真正 git worktree 共置的 workspace。jj workspace add --colocate(或 git.colocate 设置)把一个 jj workspace 放在普通 git checkout 旁边,不接管克隆。把它读作入口变宽:团队可以在同一台机器、同一个仓库上,让一个 jj workspace 与 git checkout 并排跑,然后对比——正是第一次阅读的判词要的那场试用。它依赖 git worktree add --orphan,所以最低 git 升到 2.42.0。

知道边界的 undo。jj undo 和 jj redo 现在拒绝碰其他 workspace 的操作,除非你传 --allow-cross-workspace。一个全部卖点就是“undo 很安全”的工具,收紧 undo 周围的护栏——文化测试通过。其余说明同调:jj bisect run 走之前先检查好坏端点,jj split 不再折腾编辑器会话。

零风险试试这台记录仪

在一个一次性克隆里跑 jj git init --colocate——.git 旁边会出现一个 .jj 目录,git 一切照旧,jj op log 显示记录仪在转。git 那边什么都没变;出口是 rm -rf .jj。

验证:在该克隆里跑 jj op log,会带时间戳列出你的操作——一条命令一行,说明这本账在你机器上是真的,不只是文档里。

诚实的账本:什么会坏

肌肉记忆,头一个。index 之舞——git add -p、部分暂存——对应到 jj 的 squash 和 split,同一件事,另一双手。第一周你会打出 git 动词,然后心烦。

团队观感,第二个。共置仓库在托管和同事眼里就是普通 git——但 jj 用户的工作副本提交只有 push 之后才可见,“我写到一半的活儿在哪”会得到 git 人意料之外的答案。小团队耸耸肩;工具链深的 monorepo 应该再等等。v0.46 的跨 workspace undo 拒绝是多出来的一条边界——刻意为之,而且说实话,是对的。

以及始终缺着的那张收据:基准测试。读到第二次,这个论断仍然没被说出来。我没法告诉你 jj 的 rebase 在一个 10 000 提交的仓库上比 git 快,因为我没跑过——这个数字在 bench 出现之前不存在,第二次阅读不会把读记录变成跑基准。

修订版判词:这周谁该动

第一次阅读说:试用。两周一个发布之后,算术只朝一个方向动了——v0.46 的 worktree 共置降低了试用本身的成本,需求数据也变硬了。我们看板上追踪的 undo 家族一条展示都没凉;用一条命令回应它的工具交付了两次。缺口这么宽还在变宽,就有人会来填。jj 在模型层面填,不在口诀层面——完整对比在 git-undo hub,旁边就是它搅动的那个经典决策:revert vs reset,它现在有了第三个答案,而第三个答案是一个按钮。

现在就动:带着 undo 伤疤的个人开发者和小型团队;教 git 教到看腻 reflog 前一张张垮掉的脸的人;还有——我们盯得最紧的一条道——由 agent 管理的仓库,那里每一步操作都应该默认可逆、可审计。操作日志在那不是便利;那是 git 从未交付过的审计面。

再等等:深 git 工具链、hook 重度的 CI 假设、迁移迁到一半的人。还要等 bench——本站下一篇 jj 文章会让 jj 和 git 在一个真实仓库上对打,先打印最难看的那个数字:两周的记录只买回一次疑点利益。

bench 之前两个问题:reflog 营救有没有在最糟的时刻坑过你——如果你这个月真拿 jj 干活,先坏的是什么?评论区开着;告诉我们该测什么。

$ 下一篇观点,直达邮箱

每篇一封。同意也好,拆解也好。

self-hosted · 无第三方 · 一键退订

每周一封邮件。零跟踪像素。

这是什么?