Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124

Git 的分支模型看似强大,实际上给大多数团队带来了不必要的认知负担。Jujutsu 是一个重新思考版本控制的工具,它保留了 Git 的精髓,却去掉了那些让开发效率停滞在嘴边的复杂性。
你每天用 Git,但有没有想过:Git 那些复杂到头疼的操作,到底是在解决什么问题?
我最近开始用 Jujutsu(简称 JJ),这是一个由 GitHub 工程师 Ted生子(Martin von Zweydorf)开发的版本控制工具。用了两周之后,我想说:这才应该是 2026 年程序员默认的版本控制系统。
不是说 Git 不好。Git 解决了它那个年代的问题。但 2026 年的代码协作模式,跟 2005 年 Linux 内核开发时代相比,已经发生了根本性变化。
Git 的分支模型适合「每个开发者独立贡献代码,定期合并」的模式。但现代开发不是这样的:我们在 feature 分支之间穿梭,处理 rebase vs merge 的哲学争论,为了一个冲突解决要动用 beyond compare。这些都是精神内耗。
真正的问题是:我们用 Git 管理的「历史」太多了。每一个 commit、每一个 merge、每一个 cherry-pick,都构成了我们所谓的「项目历史」。但这个历史,99% 的情况下没有任何人需要看。
Jujutsu 的核心理念是:分布式开发,但本地历史只属于你。
在 JJ 的模型里,你每次「commit」,本质上是一次本地快照。这个快照不会自动同步到远程。你可以在本地随意 rebase、squash、改写历史,而不影响任何其他人。只有当你明确「push」的时候,这些变化才会成为「共享历史」的一部分。
听起来有点熟悉?没错,有点像 Git 的 amend 和 rebase,但 JJ 把这些做成了默认行为,而不是需要特殊标志的操作。
macOS 安装:
brew install jj
Linux:
cargo install jj
Windows 通过 WSL2 是最顺滑的方式,或者用 Scoop:
scoop bucket add jj https://github.com/jj-tools/scoop-jj
scoop install jj
jj git init my-project
cd my-project
JJ 会自动初始化一个 Git 后端存储,但它不创建「main」或「master」分支——它创建一个叫 @ 的符号,指向你当前的「工作位置」。
echo "# My Project" > README.md
jj diff
你会看到 JJ 没有用「暂存区」的概念。你改了什么,它就显示什么。
jj new
jj describe -m "Add README"
jj new 创建一个新 change(JJ 的术语),jj describe 设置描述。这比 Git 的三步走(git add → git commit → git commit message)少了一步。
这是最有趣的部分。在 JJ 里,你不需要创建本地分支来隔离工作。你在 @ 上工作,这个 @ 可以通过「描述」来区分不同任务。
如果你真的需要并行工作线,JJ 用的是「虚拟分支」——同一个 commit 对象上,可以有多个描述不同的 change 叠加。这比 Git 的分支模型灵活得多。
jj git push
push 的时候,JJ 会把你的本地 change 转化为一个 Git remote ref。默认情况下,所有本地 history 都是私有的,只有 push 出去的 change 才是共享的。
我用 JJ 两周,有几个明显感受:
第一,merge 不再是噩梦。 JJ 的 merge 算法比 Git 智能得多。最常见的「我的改动 vs 别人的改动」冲突,JJ 能自动解决的概率比 Git 高很多。
第二,rebase 是本地操作。 我可以随时 rebase 我的本地 change 来整理历史,不需要担心这个操作会影响到其他人的工作。这对代码审查前的「整理提交」非常有用。
第三,undo 比 Git 更安全。 JJ 的每个操作都是不可变的,通过操作日志可以回溯到任意时刻。这意味着没有「reflog」这种需要手动管理的逃生通道——所有历史都在那里。
JJ 不是一个 Git 替代品。如果你的团队已经用 Git 并且运作良好,没有必要迁移。
但如果你遇到以下场景,JJ 值得考虑:
另外,JJ 兼容 Git——你可以把一个 JJ 仓库当作纯 Git 仓库使用,也可以用 Git 命令操作同一个存储。这使得迁移成本很低。
JJ 目前对 GitHub 的支持还在完善中。但基本的 pull/push 功能可用。
配置 GitHub:
jj git push -r origin -d @
这会把当前 change 推送到 origin 的一个 remote branch。
如果你对 JJ 感兴趣,第一步不是把所有项目迁移过去。找一个个人项目,先用 JJ 管理三个月,感受一下「没有分支压力」的版本控制是什么体验。
很多 Git 的复杂度来自于「我要管理很多分支」这个心理模型。当这个模型消失,很多操作会自然简化。
2026 年,Git 的问题不是「不够强大」,是「太复杂了」。 Jujutsu 是给这个问题的第一个认真思考后的答案。