2026-08-09 Two weeks with Jujutsu
I started using the Jujutsu VCS about two weeks ago, mostly to see what the hype was all about.
I’ll probably be sticking with it for now; I’ve been running jj git init in more and more repos, and haven’t run into anything that would push me switch back yet (or many problems at all, really).
My experience so far:
- Jujutsu makes it easier to undo mistakes, and by extension, run commands more confidently
- Jujutsu makes it easier to switch between wip work. Git stashes aren’t tied to a parent; You could make WIP commits in Git but it’s more to manage later. It’s also easier to split out new branches/MRs in the middle of something else
- Jujutsu makes it easier to keep a clean history using split/arrange/squash. This is doable in Git but less intuitive
- Jujutsu makes it easier to rebase, especially stacked MRs
- Jujutsu makes it easier to resolve conflicts (in theory; I haven’t had any large conflicts to resolve yet in practice)
- Jujutsu has been fully interoperable with Git for everything I’ve needed
My only feature request so far is to see where changes landed after jj absorb. There is an open feature request for this, and jj absorb --interactive merged a few days ago, which might help. I think I could also see the changes using the op log (or maybe in a GUI), but haven’t looked into it yet.
I’ve tried one or two VSCode extensions, and the one I’m using now is fine, but missing plenty of features. This is to be expected though and I’m sure they’ll improve. I can do all the manipulation I need to with the CLI, but seeing stuff visually in the IDE (in particular, I would like to split changes visually) would be nice.
I think if I was recommending a VCS to someone who had never used Git before, and they won’t ever need to interact with others (it’s totally possible, but they’d probably need to learn Git as well), I could comfortably recommend Jujutsu.
I think the conceptual model is simpler, the commands are more obvious, and there is less weird stuff to run into. On the other hand, ecosystem (GUI tools, etc.) are less mature. If someone is already comfortable with Git, I don’t think they necessarily need Jujutsu, but points 1/2 above alone have made my life easier already.
Some resources I used while adjusting:
- Steve Klabnik’s Jujutsu tutorial
- Jujutsu Strategies on Reasonably Polymorphic
- How I use Jujutsu on Abhinav Sarkar’s blog
jjCheat Sheet for Git Users made by Matt Silverlock- Cheatsheet for
jj’s builtin diff editor on Paul Smith’s blog - Command-Line Help for
jj(--helpis also very helpful)
I’ve also lightly edited my config:
- Added
jj recentto list recently-used bookmarks - Changed
revsets.bookmark-advance-tosojj bookmark advanceusually does the right thing - Added
jj bookmark-create-trackedto create and track a bookmark quicker - I will probably eventually try the
jjplugin for Oh My Zsh. I haven’t really wanted the aliases yet (there are shorthands likejj st, and the commands are fairly easy to remember), but I’d like a nicer statusline.
# config.toml
[revsets]
bookmark-advance-to = "closest_pushable(@)"
[revset-aliases]
"closest_pushable(to)" = "heads(::to & mutable() & ~description(exact:'') & (~empty() | merges()))"
[aliases]
recent = ["bookmark", "list", "--sort=committer-date-", "--color=always"]
bookmark-create-tracked = [
"util", "exec", "--",
"sh", "-c",
"jj bookmark create \"$1\" -r 'closest_pushable(@)' && jj bookmark track \"$1\" --remote origin",
"_"
]
Paraphrased from this reply on Bsky, with additions.