Hacker News new | past | comments | ask | show | jobs | submit login

When people find out I use jj (Jujutsu), I often get asked some version of "how's it better than Git?" And while I can list a number of reasons why I think it's better and you could argue whether or not that reason is contrived or not, I think it's all missing the point.

I think it's better -- in the most pessimistic case -- to look at jj as reframing how you think about branches and commits in the same way that learning a type of Lisp reframes your thinking even if you're a full time Python developer and have zero intention of ever using a Lisp.

The idea of shuffling commits around without fear, changing your working train of thought mid-branch, etc. is natural... mindless, even. It's one command away and you get so much muscle memory executing that command you just do it automatically. (There's no fear because `jj undo` undoes any operation you did if you regret it. Of course there a ways to undo N operations back and so on too).

I use jj full time now, but even when I periodically go back to using git (for older projects I don't have a jj clone out for), it has altered the way I look at my stream of work. I think there's value in that.

That's the pessimistic case. The optimistic case is you should be using jj because it's better and there's almost zero downside to doing it (your coworkers don't even need to know).

(This blog post was great, I just expect and already see some people focusing on the minutia of how to Git golf your way to achieving the same thing easily when that doesn't invalidate that jj is good, in my opinion).




> I think it's better -- in the most pessimistic case -- to look at jj as reframing how you think about branches and commits in the same way that learning a type of Lisp reframes your thinking even if you're a full time Python developer and have zero intention of ever using a Lisp.

For some reason this actually had me pause in fear. I've been using git deeply for years and find it very natural and mindless to use at this point. The thought that I might again be trapped in Plato's cave like I found I had been prior to learning Common Lisp is actually disturbing...

Now I don't have a choice but to give jj a shot


Bruce Lee has that quote: “ I fear not the man who has practiced 10,000 kicks once, but I fear the man who has practiced one kick 10,000 times.”

If Lisp’s “one kick” is the cons list, then jj’s is the commit: by using them for everything (they replace, at least, the git stash, index, and working copy) you actually get really fluent in manipulating them and they become more powerful than special-cased tools.


I loved git for a long time. I never understood the folks that said git’s UX was too hard.

I’ll never go back after jj. Be warned, haha.


Can’t wait to hear your experience. I felt the same way and I’m a convert now.


I didn’t know you were a jj fan! I’ve been a convert for a long time now. I fully agree with what you’ve said here.


I am! I think I heard about it through you somehow, actually. And then I kept getting PRs from people I respected with weird branch names and thought "what the hell is going on" and both of these things pushed me to look into it.

I switched cold turkey in one afternoon after reading your tutorial in about 30 minutes and never touched Git ever again (except in the very rare cases noted in my previous post). And also... bisect.


That’s awesome, it’s such a small world.


This subthread has convinced me to try it, I'm going through your tutorial now, thanks!


Nice! I’m working on a second version that reads very differently, it’s taking me a while though. Here’s the opening: https://gist.github.com/steveklabnik/53b51724920dac76fc623d9...


Thanks for your efforts. Tutorials like this is a must-have on this new frontier (for many of us).


The crazy thing to me having made the change is how utterly fearless I am doing long chains of that I would have double- or triple-checked with git. Reordering commits, fixing an earlier commit, even doing these things with multiple unmerged ancestor branches… are all trivial. I don't even have to think about it. There's no case where I'm dumped into a conflict state that must be resolved right here and right now (and where I don't even get to use any of the tools in my VCS until I fix it).

It's so fucking freeing.


What do you mean by "jj clone" ? I assumed it was possible to start using jj on an existing Git repository, and continue using Git (and jj) afterwards. Isn't this the case ?


It is. I assume they just mean an existing repo that hasn't had jj bootstrapped in it. Which is trivial, but maybe you just don't want to do it for whatever reason.




Consider applying for YC's Fall 2025 batch! Applications are open till Aug 4

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: