GUI tools only help with that to some extent, too, and only the right ones.
Although I really dislike GUIs in general so maybe that's it.
It has more users, I think, than even the “visual” source control systems that are supposed to be more usable.
Git is widest adopted, period (EDIT: because of how it blossomed out of linux dev, essentially). I was able to stick to bzr or fossil for a lot of things until github and gitlab basically became where open source work (and even corporate transitioned to some extent!) needed to happen, and the friction of using anything else is just too great at this point in time.
Which is a shame, really, as --fast-import/export is actually not a bad way to transition from one scm to another these days, and I'd personally welcome a little more active competition in the space to evolve beyond the current status quo.
In your personal opinion, what's so "bottom up" about checking out code from a repository and committing changes to a branch?
> (...) while at the same time it exposes an interface that makes it all to easy to screw things up catastrophically.
What? Care to point out a single example of what you perceive as being one of those "catastrophical" failures?
In all my professional life, which includes a bunch of years as a data analysis, I never experienced a single failure with git. Not a single one.
In fact, the only failure I ever experienced with git came from a stupid error I once made by tracking a git repository which found its way into a Dropbox shared folder.
Care to shed some light on what you perceive as being your pain points?
Fundamentally it is a same as git: you can push, pull, you have commits, branches, merges, etc... and branching is easy.
It is mostly a difference in philosophy. While git will leave you with lots of powerful and flexible tools, Mercurial will be much more limited out of the box, advanced features are extensions you have to enable.
The Mercurial history is also considered sacred, and everything is done do discourage you from modifying it, commands like squash and rebase are hidden behind extensions, branches are also permanently attached to commits (the equivalent of git branches exist and are called bookmarks).
There is also no staging area. Instead of "remote" branches, there is a simpler "phase" system that tell you which commits are local and which one have been pushed.
All that makes Mercurial easier to use, especially for non-developers. And in fact, most people who tried both preferred it over git, with the exception of git experts, who prefer git for its speed and flexibility.
tbh I'm mostly happy with git. It does what I need it to do. Yes, it could be easier and more transparent, but everything is a trade-off.