jj Concepts Guide
JJHub is built natively on Jujutsu (jj), a next-generation VCS. This guide explains key jj concepts.Changes vs. Commits
In jj, a change is the fundamental unit of work. Unlike git commits:- Changes have a stable Change ID (e.g.,
qzknlmop) that doesn’t change when you amend - The commit hash changes on amend, but the Change ID persists
- JJHub tracks and displays Change IDs everywhere
Bookmarks (not Branches)
jj calls branches “bookmarks”. They work similarly to git branches:The Working Copy
jj treats the working directory as an uncommitted change. You don’t needgit add - changes are automatically included in the current change:
Stacked Changes
JJHub’s premiere feature is first-class support for stacked changes:Landing Requests (not Pull Requests)
JJHub uses “Landing Requests” (LRs) instead of “Pull Requests”. LRs natively understand stacked changes and Change IDs.Operation Log
jj tracks all operations (not just commits):Key Differences from Git
| Concept | git | jj |
|---|---|---|
| Working state | Staging area | Working copy change |
| Stable ID | Branch name | Change ID |
| Branch | Branch | Bookmark |
| Amend | git commit --amend | jj describe + auto-amend |
| History rewrite | Rebasing required | First-class, safe |