A Lazy Sequence

Notes on jj after 3 months

I’ve now been using jj for about three months. I have adopted jj for all my hobby projects, and all the secondary work projects. I have yet to switch over with the primary work project, simply because I want to be cautious.


I’m using the command line tool exclusively. I haven’t done this with git for years; none of the git UI sticks in my head, so I end up resorting to various GUIs: magit, SourceTree (yikes), Rider. With jj (as with Mercurial previously) I haven’t felt the need for a GUI. You can tell that a lot of thought and care has gone into the front end.


I’m predominantly using the squash workflow. I still goof this up regularly, and forget to make an index change above the change I’m working on, but it’s easy enough to correct (either by creating the new chance with --ignore-working-copy, or just by spliting the changes back out).

Describing a change first and then making the edits has been great. I’ve found making a brief plan for what the change is going to be, and then refining that as the work continues is a more natural process than writing a detailed commit message after the fact. My commit message quality has taken a giant step upward.

Describing changes early has had an unanticipated advantage for hobby projects. I’m finding it much easier to return to work I shelved a day or two ago when I have a detailed change message to refer to.


I haven’t stashed anything in months. That means I haven’t goofed a stash in months either. Having as many index changes as you need completely removes the need to stash. And it‘s much easier to move index changes around.


There’s a bunch of features that make editing local history much easier and safer, in addition to the UI improvements, so I am editing my local history a lot. Rebasing, editing, etc. Knowing that I can undo at any time, and that jj is keeping track of which changes are mutable and which are immutable adds a layer of confidence that you just don’t have with git.

22 October 2024