jj-vcs

Installation
SKILL.md

Core mental model

jj is a Git-compatible version control system built around changes (revisions) that evolve over time. Each change has a change ID (stable — follows the change across rebases) and a commit hash (changes whenever the commit content changes). Refer to changes by their change ID (short prefix form) when you want to track a logical change, or by commit hash when pinning exact content.

Key differences from Git:

  • No staging area. The working copy (@) is itself a commit. jj status compares @ to its parent. Changes to tracked files are automatically part of @.
  • Change IDs, not branch names, are the primary way history is organized. A commit's change ID survives rebase, squash, and split.
  • Operation log. Every jj command creates an operation. jj undo simply undoes the last operation. jj op log shows the full history of commands run. Nothing is lost unless you explicitly garbage-collect.
  • Bookmarks, not branches. Bookmarks are labels on revisions. To move a bookmark to point at a different revision, use jj bookmark move. Git branches are just bookmarks that jj syncs to the remote.
  • Revsets. jj's revision selection language. Used everywhere commands accept revisions. Learn the common patterns (see core-concepts.md).

Finding the right command

Daily work loop

The core cycle is: start a change → make edits → describe → (optionally) start the next change.

Installs
4
First Seen
May 10, 2026
jj-vcs — opticlm/jj-skill