If you can make merge conflicts less dumb then I'm there!
If you can make merge conflicts less dumb then I'm there!
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.
Steve klabnik's tutorial is excellent as well. https://steveklabnik.github.io/jujutsu-tutorial/introduction...
Maybe I'll check it out. Deferring conflict resolution is definitely a killer feature.
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.
lazygit is really cool, and is a lot more full-featured than Retcon. But, the core "rewrite with zero friction" feature of Retcon is still unmatched, I think.
For instance: while lazygit does allow you to reorder commits without entering a separate mode, that's only if each move is conflict free. If you have two commits that need to both be moved at once, then in lazygit, you'll have to resort to a regular interactive rebase (so, with the separate planning and execution steps, no undo or preview along the way, etc).
In Retcon, if a commit move results in a conflict, that doesn't matter; you can keep making changes to your history anyway, and then resolve any remaining conflicts when you're ready. It makes the workflow super fluid.
There's probably still a ton Retcon could learn from lazygit/magit/jj, though!
I didn't realize Retcon could do this from the website, nice!
I wonder how similar your approach is to [jj's approach to conflicts]; whether you reinvented the same way of modelling conflicts in the repo or use a different one. (See also the link to the technical docs from that page)
https://gitbutler.com/ also [borrowed this idea] from jj.
[jj's approach to conflicts]: https://martinvonz.github.io/jj/latest/conflicts/
[borrowed this idea]: https://blog.gitbutler.com/fearless-rebasing/
So, there are several tools exploring these ideas, but there are interesting differences in (for example) how close to Git each of these approaches stays.
Retcon is pretty different: during a rebase, the state of everything is only stored in RAM, not serialized to the repo. So while you can postpone resolving conflicts until you're done putting commits in place, you do have to do so before you go do something else in your repo.
The RAM representation is basically a list of commits (well, commit-likes), what I call a virtual history. It's the history you want to get to, but that's not currently representable with a regular, physical Git history.
Then many people should purchase SmartGit client. Which supports more of the same thing (with couple more clicks, granted) but also has a proper tree view. Also supports linux ffs.
Never working with git without it again.
[1] https://docs.syntevo.com/SmartGit/Latest/HowTos/Modifying-th...
I don't know why the docs are this way, it's literally that. Maybe old version or something. This page is closer to the truth.
https://docs.syntevo.com/SmartGit/Latest/Manual/GUI/Branch/R...
You can download it and check it out, they have trial licenses.
It would take a lot for me to move because I already pay for Jetbrains IDE.
I already posted in this thread but I just love these two tools and wish more people knew about both of them.