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, and jj absorb make 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 tug to 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.