JJ Cheat Sheet
Relationship to Git & Basic Positioning
- Many commands share Git names but differ semantically; this is intentional for familiarity but can be confusing.
- jj uses Git as a storage backend, so pushed history looks like normal Git commits; coworkers don’t need to know jj is in use.
- Several commenters emphasize: anything jj does can in principle be done with Git, but often with more steps, arcane options, or brittle workflows.
Key Features & Workflows People Highlight
- Easier rebasing and “fearless” history editing: commits are mutable “changes”; features like
jj undo,jj squash, andjj absorbmake restructuring history safer and more intuitive. - Powerful revset queries (e.g., “rebase all my TODO commits onto the current head”) are seen as something Git can’t do in a reasonable way.
- First-class conflicts: conflicts are stored in commits, rebases always complete, and conflict resolution can be deferred; conflict resolutions propagate through later operations.
- “Mega-merge + absorb” and “stack of changes” workflows appeal to people juggling many dependent branches or PRs.
- Bookmarks vs branches: jj deemphasizes moving branch pointers, encourages trunk-based / stacked workflows, with aliases like
jj tugto simulate moving branches.
Learning Curve & Mental Model
- Several users struggle to build an accurate mental model, especially around conflicts, bookmarks that don’t move, and “changes” vs “commits”.
- Some find jj’s pictograms and diagrams confusing, especially for
jj abandon; others appreciate ongoing efforts to clarify diagrams and tutorials. - There’s demand for Git-user-specific explanations and “translation guides” for real-world team workflows.
Tooling Gaps & Practical Blockers
- Lacking or weak: LFS, Git hooks, submodules, line-ending handling, NTFS/WSL file-mode quirks, large-file story (no real LFS-equivalent), and polished editor/IDE integrations.
- SSH behavior has been problematic; recent versions can shell out to Git to improve this.
- Large-file auto-tracking was called a showstopper, though newer versions auto-leave oversized files untracked; true de-bloating once pushed remains Git-limited.
Divergent Opinions & Skepticism
- Enthusiasts report abandoning Git almost entirely and praise quality-of-life improvements.
- Skeptics see some examples as “just aliases over Git” or don’t feel jj targets their pain points.
- Some speculate on Google’s role and motivations; others clarify jj began as an independent side project and is not merely a thin UI over internal tools.