用途:在 Jujutsu(jj)工作区内执行版本控制操作,替代 git 的 commit/push/PR 流程。
主要能力:jj 中工作副本始终是活动提交(@),没有暂存区,也没有显式提交步骤;文件改动会在下次 jj 命令时自动修正 @。核心动作只有两个:describe(为工作命名)和 push(推送到远端)。
使用方式: 检测:先运行 jj root >/dev/null 2>&1 确认处于 jj 工作区,成功后只用 jj 命令,不用裸 git。 描述(用户说"提交"或"保存"时):先用 jj status、jj diff、jj log --limit 10 收集上下文,按仓库提交风格拟消息,然后运行 jj describe -m "<message>" && jj new,无需 git add 和暂存;jj new 会在其上创建新改动,避免后续编辑修正已描述的工作。 推送:检查 jj bookmark list 与 jj log -r '@-';若目标改动无书签,运行 jj bookmark set <name> -r @-;推送用 jj git push --bookmark <name> --allow-new,首次推送书签必须加 --allow-new,否则失败,后续推送不需要;用 jj log --limit 5 确认。 推送并建 PR:若 @ 有改动,先 jj describe -m "<message>" && jj new,设置书签,推送;用 jj log -r 'trunk()..@-' 分析 PR 范围内全部改动;再用 gh pr create --head "<name>" --title "<title>" --body "<summary + test plan>" 创建。 冲突解决:冲突不阻塞工作,可稍后处理。用 jj log -r 'conflicts()' 查找,jj edit <change-id> 定位,手动改标记或 jj resolve、jj resolve --tool=:ours 解决,后代会自动 rebase。安全方面可用 jj undo 撤销操作,jj op restore <id> 回到任意过去状态。
限制与注意事项:不得在 jj 仓库用裸 git 命令,只用 jj git 子命令;首次推送书签必须加 --allow-new;使用 change ID(稳定)而非 commit hash(修正时会变);书签仅推送需要,本地工作基于改动;jj commit -m "msg" 等价于 jj describe -m "msg" && jj new。参考资料 references/git-to-jj.md、references/revsets.md、references/workflows.md 仅在对应边界场景下按需阅读。