mcpField
U
using-jj

using-jj

github.com/trevors开发76 次安装
代码仓库

关于 using-jj

面向 jj 的工作流技能,涵盖变更描述、匿名变更、拆分、压缩、历史恢复及 GitHub 拉取请求操作。它提供命令示例,并说明常见的修订版本和书签陷阱。

主要功能

  1. 01jj 变更描述规范
  2. 02拆分、压缩、编辑与吸收流程
  3. 03书签和推送指引
  4. 04GitHub 拉取请求操作
  5. 05操作与变更历史恢复
  6. 06Revset 命令示例

适用场景

  1. 01整理 jj 变更中的工作
  2. 02在变更栈中应用修复
  3. 03推送变更并创建 GitHub 拉取请求
  4. 04恢复仓库的先前状态

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/trevors/dot-claude --skill using-jj

安装后在 Claude Code 中输入/using-jj确认已加载。

附带文件evals/trigger-eval.jsonREFERENCE.md

详细介绍

jj 工作流

表格、Git 对应项、故障排查和 revset 速查表:REFERENCE.md。

文风规范

  1. 必须填写描述。 绝不能让工作副本处于“(no description set)”状态。
  2. 书签是为 GitHub 准备的,不是为你准备的。 使用匿名变更;仅在推送时添加书签。
  3. 优先使用 absorb,而不是手动路由 squash。 让 jj 将代码块分配给正确的祖先。

非交互式拆分

jj split 需要同时指定文件集和 -m:

jj split -r <rev> -m "first part" path/a path/b   # rest stays in the child commit

Evolog 寻址

先前版本:<change-id>/0(最新),/1(上一个)。jj restore --from xyz/1 --into xyz 可还原到先前状态。

工作流

Squash(推荐)
jj describe -m "feat: what I'm building"
jj new -m "wip"
# ... make changes ...
jj squash -m "feat: done"
Edit(修复堆栈中间的变更)
jj edit <change-id>
# ... fix ...
jj new -m "back to work"   # descendants auto-rebased

Absorb

在 @ 上运行 jj absorb,它会将每个代码块路由到最后修改这些行的祖先。

书签与推送

书签不会自动前移——需要显式移动。将书签指向实际包含这些工作内容的修订,具体取决于你刚才使用的工作流:

jj bookmark set <name> -r @-    # after `jj squash`/`jj commit`: @ is a fresh empty change
jj bookmark set <name> -r @     # after `jj describe -m` alone: @ IS the work
jj git push

如果弄错了,不会有任何提示:当工作内容位于 @ 时推送 @-,发布的会是上一个提交。

不要改写已评审 PR 的历史

默认方式(安全——保留评论锚点):

jj new feature-x -m "fixup: address feedback"
# ... make changes ...
jj bookmark set feature-x -r @
jj git push

jj new feature-x(末尾不带 -)会将修复堆叠在书签之上。 feature-x- 是 feature-x 的父版本 的 revset,因此它会从已评审提交分出一个平行分支,而 bookmark set -r @- 随后会将书签向后移动,丢弃评审者添加批注的那个提交。

创建 PR(jj + gh)

在 jj-colocated 仓库中,git HEAD 处于分离状态——gh pr create 会因“not on any branch”而失败。始终传入 --head <bookmark>——绝不要依赖 git 自动检测:

jj bookmark set feature-x -r @-   # or -r @ — see "Bookmarks & pushing" above
jj git push
gh pr create --head feature-x --title "..." --body "..."

恢复

运行 jj op log,然后运行 jj op restore <id>;jj evolog -r <change-id> 会显示单个变更的历史。完整说明见 REFERENCE.md。

不可变提交

已推送的提交受 immutable_heads() 保护。jj squash --into <id> --ignore-immutable 是将修复折叠进已推送提交的批准方式;rules/pr-safety.md 仍会根据 PR 是否已评审来决定是否允许这样做。

Revsets

jj log -r 'trunk()..@'              # everything between main and here
jj log -r '::@ & ~::trunk()'         # my branch only
jj log -r 'mine()'                  # my commits
jj log -r 'author(substring:"trevor")'  # bare strings in author()/description() are whole-string globs; say substring: for partial

评论

支持 Markdown