smithery/williballenthin

working-with-jj

Jujutsu (jj) version control cheatsheet - viewing history, making commits, diffs, and descriptions

Installation

$ npx skills add smithery/williballenthin --skill working-with-jj

Similar popular skills

Related neighbors and high-traction skills in the same topics — useful to compare before installing.

Also in this package

Other skills from smithery/williballenthin.

npx skills add smithery/williballenthin

Browse all from smithery/williballenthin

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Not declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Also listed on

Alternate registries and mirrors of this skill.

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 4,723 B
  • docs SUMMARY.md 121 B

History

  1. First recorded snapshot · 0 installs

SKILL.md

Working with Jujutsu (jj)

Quick reference for common Jujutsu operations used in development workflows.

Jujutsu is a Git-compatible VCS that eliminates staging and treats your working directory as an actual commit that continuously updates.

Detecting Jujutsu

Check if the project uses jj:

test -d .jj && echo "jj" || echo "not jj"

Key Concepts

  • @ - Your current working copy (like Git's HEAD)
  • @- - Parent of working copy (like Git's HEAD~1)
  • No staging area - Changes are automatically recorded
  • Change IDs - Stable identifiers that survive rebases
  • Commit IDs - Traditional hashes compatible with Git

Recommended Workflow

The jj way:

  1. Make edits to files
  2. Run jj new to create a new commit (repeat for every logical change)
  3. After a series of commits, go back and review with jj log
  4. Add meaningful descriptions with jj describe <change-id> -m "description"
  5. Squash related commits together with jj squash

This workflow creates fine-grained history as you work, then lets you organize it meaningfully afterward.

Viewing the Log

Show recent commits:

jj log -r @~10..@

Show full log:

jj log

Show specific commit:

jj show <change-id>

Show log with more detail:

jj log --stat

Viewing Diffs

See current changes:

jj diff

Diff specific commit:

jj diff -r <change-id>

Diff between two commits:

jj diff --from <base> --to <head>

Git-style diff output:

jj diff --git

Show what changed in a commit:

jj show <change-id>

Getting Commit References

Current commit ID:

jj log -r @ -T commit_id --no-graph

Parent commit ID:

jj log -r @- -T commit_id --no-graph

Get change ID:

jj log -r @ -T change_id --no-graph

Revset references:

  • @ - working copy commit
  • @- - parent commit
  • @-- - grandparent commit
  • root() - the root commit
  • trunk() - main branch tip

Making Commits

Create new commit (after editing files):

jj new

Create new commit with message:

jj new -m "commit message"

Commit current changes with description:

jj describe -m "commit message"
jj new

Note: Unlike Git, jj automatically tracks file changes. No add command needed!

Setting Descriptions

Set description for current commit:

jj describe -m "new description"

Set description in editor:

jj describe

Set description for specific commit:

jj describe <change-id> -m "description"

Organizing Commits

Squash current commit into parent:

jj squash

Squash specific commit into its parent:

jj squash -r <change-id>

Squash current commit into a specific commit:

jj squash --into <target-change-id>

Move changes from one commit to another:

jj move --from <source> --to <target>

Edit an earlier commit:

jj edit <change-id>

(Make changes, then jj new to continue)

Split a commit into multiple:

jj split <change-id>

Status Information

See current status:

jj status

See bookmark (branch) info:

jj bookmark list

Common Patterns

Get range for code review:

BASE_SHA=$(jj log -r @- -T commit_id --no-graph)
HEAD_SHA=$(jj log -r @ -T commit_id --no-graph)
echo "Reviewing: $BASE_SHA..$HEAD_SHA"

Compare against trunk:

jj diff --from trunk() --to @

See files changed:

jj diff --summary

Git Interoperability

Fetch from Git remote:

jj git fetch

Push to Git remote:

jj git push

Export to colocated Git repo:

jj git export

Workflow Comparison

Task Git Jujutsu
Make commit git add . && git commit -m "msg" jj describe -m "msg" && jj new
See changes git diff jj diff
View history git log jj log
Get current SHA git rev-parse HEAD jj log -r @ -T commit_id --no-graph
Amend commit git commit --amend jj describe (then jj new if done)
No staging (N/A) Automatic!

Why Jujutsu?

  • No staging area confusion - Edit files, they're tracked
  • No detached HEAD - All commits are reachable
  • Conflict tracking - Conflicts are first-class objects
  • Safe experimentation - Easy to undo anything
  • Git compatible - Works with GitHub, GitLab, etc.