GIT^:Git & Workflow

The jj Field Guide

Jujutsu (jj) version control in plain language: the save → bookmark → push ritual, what @ and @- really mean, bookmarks, syncing with GitHub, and undoing anything.

beginnerupdated 2026-08-28jj
jj-field-guide.pdfDownload

The jj Field Guide

Jujutsu (jj) version control, finally explained in plain language. Verified on jj 0.44.0. The full illustrated guide is embedded above (and downloadable) — this page is the fast reference; the PDF is the long-form walkthrough with real command output.

One way to do each thing — the way that works every time. No aliases, no shortcuts, no “you could also…”.

The ritual — how a note gets to GitHub

The whole game is four moves, in order:

jj st                          # 1. look: what did I change?
jj commit -m "update: ..."     # 2. seal it with a message
jj bookmark set main -r @-      # 3. move the sticky note onto the sealed work
jj git push                     # 4. send it to GitHub

And once per computer, ever — not before every push:

jj bookmark track main@origin   # link your main to GitHub's main. ONCE.

You can drop a step: moving a bookmark just repoints a label — it creates nothing to commit. Commit once, move the note, push. Three moves, not five — a second jj commit only seals an empty change.

The three ideas that replace everything git taught you

  1. Your folder is already a commit, called @. There is no staging area and no jj add. Any jj command snapshots every edited file into @ first — edit a note, run jj st, and your edits are already inside @.
  2. @- is the commit right below you. History is a stack: @ on top, its parent @-, then @--. jj commit seals your work and opens a fresh empty @ on top — so the work you just finished now lives at @-. That is why the bookmark step says -r @-, not -r @.
  3. Bookmarks never move by themselves. A bookmark is jj’s word for a git branch — just a named sticky note stuck to one commit. Git secretly drags the branch pointer forward when you commit; jj does not. Nothing moves a bookmark except you (jj bookmark set main -r @-). GitHub reads main’s sticky note, so until you move it, GitHub sees nothing new.

In the full guide (PDF)

§Topic
01The big picture — the three ideas that replace git
02The words — @, @-, change, bookmark, main@origin, tracked
03A worked example — built from nothing, on real output
04Save your work — the everyday loop and commit messages
05Bookmarks, finally explained
06Push — what “track” actually means
07Fetch & sync — get what’s on GitHub, safely
08Side branches — drafts that don’t touch main
09When things go wrong — undo anything
10The reference card — every command, one place
On this page

☧ CPTS · ordered posts

Locked

Unlock with your Main_Key through local GPG.

Start the local GPG helper

In your cheatsheet checkout, run:

npm run unlock:helper

Open the link it prints, or paste its pairing code below. Keep the terminal open until GPG finishes.

Import an index you already decrypted

Download the encrypted index, then decrypt with GPG:

gpg --output report-index.json --decrypt report-index.gpg

Your private key stays in GPG. The decrypted index is saved in this browser so you can reopen it after navigation, refreshes and restarts. Lock this browser or clear this site's browser data to remove the saved index. Nothing is uploaded.