faulted page

jj - gitting my VCS sanity back

at the start of march, i finally decided to give this jujutsu [jj] thing a go. being a long-time git user with too much random-internals-trivia rattling around in my head, upending my workflow for some little-known VCS that wanted to "abstract everything away" sounded silly at first. oh how wrong that was.

after 2 months in jj land, i can say without a doubt that i don't miss git. sure, i'm still interacting with git repos via jj, but i almost forget git exists (no really, even with my code living in GitHub, i still don't have to care what git does; how it works; or how my peers are using it to interact with our codebase.)

no staging area or stashes, only commits

the concept of everything being "committed" all the time with no unstaged/stashed changes was weird at first - although now it feels a lot more manageable than git's approach. if i'm starting to make any kind of change at all, i'll jj new into an empty undescribed change (from whatever parent makes sense), and treat that as my staging area.

whether i split/squash all/parts of that change into/before/after any other change doesn't matter. i might even leave that change off to the side for a nice friday afternoon snack.

stacked branches

i've been stacking a lot of branches over the past month for a bunch of different changes: changing frameworks, implementing observability shit, restructuring projects, and finally actually working on features to name a few. that would've been a lot of interactive rebasing and somewhat careful planning of what's getting committed where, but in jj i've been able to very easily change things multiple branches back to resolve a PR comment, and within seconds go back to whatever current change i'm working on without thinking of rebasing & potentially reorganising commits.

making that change and having it automatically rebased (while still keeping stable change IDs - unlike commit hashes) onto your current tree is such a non-event that you won't even realise it's happening.

conflicts

and conflicts being something you can deal with later has saved me a lot of time -- not having to worry that i edited some file from an older change that breaks 20 changes later (and won't see the light of day for another 3 PRs) gives me time back to work on whatever the current thing is.

hell, the longest conflict i've left unresolved was over a week old - i was probably going to (and did) make more conflicting changes with no plans on merging that change anytime soon, so why bother fixing it until i really need to!?


iirc i first heard about jj on the Oxide & Friends podcast last year, but i have no idea who/what episode it was