用途:为 Jujutsu(jj)版本控制提供进阶参考,覆盖 describe/new/commit/push 之外的场景,包括非交互式 split、推送前书签应指向哪个修订、absorb、evolog 寻址、恢复与不可变提交等。
主要能力与用法:
- 非交互式 split 需同时给出 filesets 和 -m:jj split -r <rev> -m "first part" path/a path/b,其余内容留在子提交中。
- evolog 寻址:<change-id>/0 为最新,/1 为上一版;jj restore --from xyz/1 --into xyz 可回退到先前状态。
- 工作流:squash 推荐用 jj describe -m、jj new -m、jj squash -m;中途修复用 jj edit <change-id> 后 jj new -m,后代自动 rebase;jj absorb 从 @ 把各 hunk 路由到最后修改这些行的祖先。
- 书签与推送:书签不会自动前进,需显式移动。jj squash/jj commit 后用 jj bookmark set <name> -r @-;仅 jj describe -m 后用 -r @。弄错会静默推送上一提交。
- 不重写已评审 PR 历史:默认安全做法是 jj new feature-x -m "fixup: address feedback",改完后 jj bookmark set feature-x -r @,再 jj git push。
- 创建 PR(jj + gh):jj-colocated 仓库中 git HEAD 处于 detached,gh pr create 会报 not on any branch,必须传 --head <bookmark>。
- 恢复:jj op log 后用 jj op restore <id>;jj evolog -r <change-id> 查看单个变更历史。
- 不可变提交:已推送提交受 immutable_heads() 保护,jj squash --into <id> --ignore-immutable 是折叠修复的认可方式,但仍受 rules/pr-safety.md 对已评审 PR 的限制。
- revsets 示例:jj log -r 'trunk()..@'、'::@ & ~::trunk()'、'mine()'、'author(substring:"trevor")';author()/description() 中裸字符串为整串 glob,部分匹配需加 substring:。
限制:资料未提供安装方式、平台支持、收费与价格信息;具体规则细节见 REFERENCE.md。