Skip to main content

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 need git 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