Schafe sind bessere Rasenmäher | Why I prefer Jujutsu over Git
Why I prefer Jujutsu over Git
Robert<br>Lützner
Published 2026-01-27T11:51:00+01:00
27. Jan 2026
gitjujutsu
Reading time: 12 minutes
I’ve been using Jujutsu for about two months now and it has almost entirely replaced Git for me.<br>There are only a few actions left where I still prefer Git and I’ll try to explain why.<br>Both can coexist and in fact complement each other, so this hasn’t been a deal-breaker for me.
This is not a tutorial!
If you’re interested in learning how to use Jujutsu, here’s the official tutorial.<br>You can also find a more exhaustive tutorial here.
What is Jujutsu?
I’ve already mentioned Git, so you probably guessed that Jujutsu is some kind of version control system (VCS).<br>When I first heard about “a new VCS”, I ignored it immediately, because nothing’s going to replace Git anytime soon.<br>I only took a closer look when I learned that Jujutsu is developed to be compatible with many VCS backends, including Git and Mercurial and some more obscure ones.
Knowing if it’s for you.
You might like Jujutsu if…
…you are comfortable working in the terminal.
…you like pedantically pushing code around between commits.
…you work with Gerrit.
…you are using different VCSs for different projects.
This might not be for you, if…
…you are not comfortable working in the terminal.
…you don’t care about clean commits and/or clean commit messages.
…you work with a lot of branches.1
What it does well
Working with revisions
At first glance revisions and commits seems interchangeable.<br>However, revision IDs stay stable, while commit IDs change.<br>This will feel familiar to you, if you’ve worked with Gerrit as a VCS.
The way this works is that everytime you run any jj command, your workspace gets “snapshotted”.<br>Technically, it’s similar to starting with an empty Git commit that gets amended over time as you work.
The jj log command shows you both, revisions and commits, highlighting the first few characters that make them unique.<br>You can address anything by the first few characters.
Here are a few more things that you can do with revisions.
You can use jj evolog to review all revisions and jj restore to restore earlier versions.
You can use jj undo to completely revert the latest jj command.
Almost all jj commands accept a revision with the -r parameter. Revisions and commit IDs are interchangeable for this parameter.
git uses HEAD, jj uses @.
@-: previous revision.
@--: jump back two revision.
Editing older commits easily
The main reason why I love jj!<br>It makes editing the content of commits and commit messages very easy and comfortable.
Squashing!!!
# Squash your current work into the previous commit. Equivalent to git commit --amend.<br>jj squash<br># Squash your current work into an older commit, rebasing everything else that comes after.<br>jj squash --into
Splitting!!!
# Open an editor to select your files, code chunks or even individual lines that you want to split out into a separate commit.<br># Select with the spacebar, confirm your choice with 'c'.<br>jj split<br># Found something that belongs into the previous commit.<br>jj split<br>jj edit @-<br>jj squash
Imagine doing that in Git. You’d
run git rebase --interactive,
select the commit you want to edit,
??? Maybe git revert? Edit the files manually to remove your changes? New commit, revert again, squash?
It’s complicated! Jujutsu makes this incredibly easy.
Rebasing!!!
If you edit an older commit, those after it get rebased automatically.<br>If that generates a conflict, the rebase will still succeed, marking all affected commits as having a conflict.<br>Once you resolve it, everything gets rebased again and hopefully the conflicts are all gone.
# Rebase a single commit.<br>jj rebase -r --onto master<br># Move a single commit to a specific place.<br>jj rebase -r --insert-before<br># Rebase a chain of commits.<br>jj rebase --source --onto release/ORO
Changing commit messages!!!
# Edit the current commit message. You can do this for an empty commit too, as a reminder or goal for what you want to get done.<br>jj describe<br># Edit the previous commit message.<br>jj describe -r @-<br># Edit an arbitrary commit message. All following commits will be rebased automatically.<br>jj describe -r
Verbose / Descriptive commands
I generally prefer verbose commands, because they are easier to remember.<br>If you’re screaming at the monitor right now, let me say that I have a counter-example later on that goes against what I’m stating here.<br>Verbosity is not always the best way to go.
# Oh no! I accidentally added a config file to my change.<br>jj file untrack<br># Now to edit .gitignore and make sure it never happens again!
# Some commands I mentioned before, vs. their Git counterparts.<br>jj describe # git commit --amend<br>jj commit # git add . && git commit<br>jj split # I did the git rebase --interactive comparison above<br>jj...