3 ms·
I'm just going to drop a casual shout-out to jujutsu[1]. It elegantly solves things like rebase/merge conflicts (and solves a lot of other sharp edges in git at
by stouset 2y ago
I'm just going to drop a casual shout-out to jujutsu[1]. It elegantly solves things like rebase/merge conflicts (and solves a lot of other sharp edges in git at the same time). It eliminates the need for WIP commits, stashing, and a host of other workflow bandaids we’ve all internalized. Best of all, it’s 100% git-compatible, so you can mix and match jj and git commands whenever needed, your coworkers never need know you're using something else, and even if it never gain critical mass you can still just use it and have superpowers while everyone else lives in the metaphorical stone age.
It is one of those rare birds that is both more powerful than the tool that it replaces while also being drastically easier to use. I am (was?) a git power user. It took me all of a day to replace git with jj and generously the rest of the week to become essentially as fluent. I will never go back.
Chris Krycho's post[2] was what originally sold me and I hope it sells you too.
[1] https://github.com/martinvonz/jj https://github.com/martinvonz/jj
[2] https://v5.chriskrycho.com/essays/jj-init/ https://v5.chriskrycho.com/essays/jj-init/
- nchmy 2y agoCame to plug jj as well. Steve klabnik's tutorial is excellent as well. https://steveklabnik.github.io/jujutsu-tutorial/introduction/introduction.html https://steveklabnik.github.io/jujutsu-tutorial/introduction...
- ilyagr 2y agoI'll add that while `jj` itself is a CLI, people have made GUIs on top of it that allow for drag and dropping of commits: https://github.com/gulbanana/gg https://github.com/gulbanana/gg https://www.visualjj.com/ https://www.visualjj.com/
- IshKebab 2y agoYeah I've heard of it. I was put of by the removal of the staging area which I think is one of Git's nicest features. Maybe I'll check it out. Deferring conflict resolution is definitely a killer feature.
- stouset 2y agoThis was the exact thing that kept me from trying it sooner. I wish I’d realized that that doesn’t imply an “everything gets committed” approach. It’s trivial to split a change in two. So your working copy is constantly snapshotted, and when you’re finished you `jj split` and choose the parts you want to keep. The rest is moved out into a new change. That workflow is in practice basically identical to the `git add -p` one, though the terminology is a bit different and there are some greatly simplifying changes under the hood.