Switch to Jujutsu Already: A Tutorial
Practical limitations and integration issues
- Lack of Git submodule support is a hard blocker for some; they must fall back to pure Git for such repos.
- GPG/signing with security keys is described as painful: jj re-checks signatures frequently, prompting for hardware keys, and lacks Git’s
defaultKeyCommand‑style flexibility. - Git-based tooling (e.g. GitLab CLI, GitHub PR workflows) often break because jj leaves Git in a detached HEAD or nonstandard state; some users see many conflicts after merges or squashes via GitHub.
- Mixed jj/Git usage can produce many unreachable objects, making Git operations slow until manual
gcis run. - No support yet for some workflows like
git rebase -xor git‑lfs; this excludes certain lint/format pipelines and large-file setups.
Perceived advantages of Jujutsu
- Workflow is described as “Play-Doh”: easy to constantly create, reorder, and refine small commits, then shape them into “perfect boxes” with little friction.
- Rebase is a major selling point:
- Can rebase trees of commits and update bookmarks automatically.
- Easily move or split parts of a stack, parallelize branches, and reorder ranges.
- Keeps going through conflicts (“committable conflicts”), allowing resolution later.
- Handles merge commits and conflict reuse better, and is much faster by avoiding unnecessary working-copy updates.
- Strong support for stacked/chain PR workflows and “clean history” practices (e.g., retroactively fixing typos in the original commit).
- Powerful revset/template languages, global undo/restore of any repo state, and easier mental model for some users than Git’s index/stash concepts.
- TUI/Emacs frontends (jjui, jj-mode) are praised for making the model more approachable.
“Git is fine” camp
- Many commentators say they rarely need more than ~5 Git commands, are comfortable with stashes, worktrees, interactive rebase,
--fixup/--autosquash, reflog, and see no missing capabilities. - Some argue complaints stem from not understanding Git’s DAG model; once you see commits as a graph and branches as pointers, Git’s behavior “clicks.”
- For these users, jj feels like different syntax for workflows they already manage in Git, with added learning and tooling costs.
Learning curve, UX, and messaging
- Several enjoy jj after a brief adjustment, but others bounced off due to the new mental model and command set.
- Some find jj’s proponents and the article’s “if you don’t like jj you’re wrong / I don’t get git” tone off‑putting or “cultish,” especially when used as an argument instead of concrete feature comparisons.
- There’s pushback against the idea that “git is too hard” is a bad reason to seek alternatives; others insist developers must deeply learn Git since it’s ubiquitous.
Advanced workflows and scaling
- Advocates highlight workflows that are impractical in Git: heavy rebase-driven, stacked-commit development on main, large chains of review commits, and “always clean history” without rebase pain.
- Some report jj scales fine to multi‑GB monorepos, with Git still available as a fallback for slow commands like
blame. - For users happy with linear, simple Git workflows, these advanced patterns are seen as solving problems they don’t have.