用途:为使用 JJ(Jujutsu)版本控制系统的用户提供专家级指导与命令参考,覆盖各类与 JJ 相关的工作场景。
核心概念:变更 ID(不可变)与提交 ID(基于内容、编辑后会变)不同;操作日志支持逐步撤销(多次 jj undo 可回退更远,jj redo 反向);无暂存区,工作副本自动快照;冲突不阻塞,可稍后解决;提交轻量、可自由编辑;自 v0.34 起默认与 Git 同址(同时存在 .jj 与 .git)。JJ 有三套 DSL:revsets(选取修订)、filesets(选取文件)、templates(控制日志显示内容与格式)。
主要能力与命令:查看历史用 jj log -r <revset>,可选 -p(含差异)、--count、-G(--no-graph 简写);jj show -r <rev> 显示描述与差异;jj evolog -r <rev> [-p] 查看修订演变;jj new [-A] <base> 创建并编辑修订(-A 插入到 base 与其子级之间),jj new --no-edit <base> 创建但不切换;jj edit <rev> 切换编辑;jj desc 与 jj metaedit 设置描述与元数据;jj diff 相关命令查看改动、版本间差异或指定修订文件内容;jj restore 丢弃或从其他修订恢复文件;jj split 拆分、jj absorb 自动压缩到祖先提交;jj rebase -s/-r ... -o/--onto 变基(注意 -d/--destination 已弃用);jj file annotate 追责、jj bisect run 二分定位引入缺陷的提交。其他命令包括 jj undo/redo、jj sign/unsign、jj revert、jj tag set/delete、jj git colocation enable/disable。
常用 revset:@、@-、@--(工作副本及其父、祖父),::@(祖先),@::(后代),mine()、conflicted()、visible()、hidden()、description(substring-i:"text")、subject(substring:"text")、signed(),以及 |、&、~ 集合运算,change_id(prefix)、parents(x,2)、exactly(x,3) 等。
常见坑点:用 -r 而非 --revisions;并行分支用 --no-edit;shell 中给 revset 加引号;变基用 -o/--onto;v0.32+ 符号表达式更严格,多义前缀需用 change_id(...) 或 bookmarks(...);v0.36+ filesets 默认按 glob 匹配,含特殊字符的字面路径用 cwd: 前缀。
脚本与恢复:scripts/ 目录下有 jj-show-desc、jj-desc-transform、jj-batch-desc、jj-checkpoint 等辅助脚本;恢复时可用 jj op log 找到出问题前的操作,再用 jj op restore <op-id> 将整个仓库(含历史)还原到该状态。JJ 可执行文件自带文档,可用 jj help -k bookmarks/revsets/filesets/templates 及各子命令 --help 查询。限制:本资料未提供收费、价格、平台或效果相关信息;具体版本行为请以实际安装版本为准。