Jujutsu (jj) VCS - Git, but better
25 Feb 2025
Jujutsu is a new VCS which aims to fix Git’s UX problems. I’ve been using it daily for a few months and it has completely replaced Git for me. The fact that it is compatible with Git repositories allows me to use it without affecting my coworkers, which still use Git.
For me it has been one of those tools that require some adaptation time at first. I went from “I don’t think this adds any value over vanilla git” to “I don’t know how I ever worked without this”.
I don’t say this lightly or as a Git newbie. I think that I am well versed in Git and its advanced concepts. I know my way around the basic commands such as add
, commit
, merge
and checkout
, but also around the more advanced ones such as rebase
, reflog
, bisect
or cherry-pick
. I helped to stablish Git workflows at multiple jobs and many times my coworkers ask me for help when something goes wrong.
jj mental model is much simpler than Git’s. It makes sense and it is easy to remember. Everything is a revision. There is no stash. No staging area. Just another revision like the previous one.
If you need to update an old revision just go ahead and make the change. Newer revisions will be automatically rebased. If there is a conflict you don’t have to solve it right now. The revision is just marked as conflicted, and you can edit it and solve the conflict at a different time.
You can create unnamed branches to test functionality. You can create unnamed commits to quickly make changes. You can easily switch to a different bookmark (what Git calls “branches”) to help a coworker without having to stash whatever you were doing. Remember, it is just another revision like the other ones.
One thing that I love is to create empty revisions that serve me as a checklist of what I have to do. I later go and edit them one by one implementing the required pieces and pushing them as required.
Another thing that I love is to have multiple stacked bookmarks (remember, those are like Git’s “branches”) so I can make a change in or rebase one of those bookmarks and get all the subsequent ones automatically updated and rebased. Then I can just jj git push
and push them all at once.
As I said multiple times already:
jj is to Git what Tailwind is to CSS.
If you find jj interesting and want to take a look, here is a list of resources that have been extremely helpful for me:
- Jujutsu VCS Introduction and Patterns - a nice, not too long article that showcases jj usage and common patterns. If you are new to jj I think that this is a great place to start.
- The jj repository - also a great place to start and to take a look at the “Features” section. Notice how it lives in GitHub, showcasing the perfect compatibility with Git.
- Steve’s Jujutsu Tutorial - a deep tutorial about jj. If you have questions they will be mostly covered here or in
- The jj official docs - everything you need to know about jj (the cli help is also amazing).
- The Jujutsu version control system - a great summary on how jj differs from Git.
- jj init - gives a real shot at replacing Git with jj.
- jj cheat sheet - a great cheat sheet thay you can print and have on your desk next to you.