I've said this in the past on HN posts about mercurial but it bears repeating: if you had bad experiences with mercurial in the past, I strongly urge you to spin up one of the latest releases. Engineers at Google, Facebook, Mozilla, and Unity contribute regularly and mercurial has become more feature rich and substantially faster over the past few years.
Mercurial does everything that git does (in fact, you can pull from or push to git repos with hg-git), has a UI that's easier to learn, and has online help that is terse and helpful. As far as killer features go, check out phases[1] and changeset evolution[2]. The latter is still at alpha level and the UI is unstable, but I use it for day-to-day work and find it incredibly useful.
Granted, it's not a commonly used feature by solo devs working on their own projects, but is useful for team repos that get large enough where you need to do audits on the codebase.
Even though I use git day-to-day, I keep around an hg-git clone specifically for revsets. What's the point of a version control system if you can't actually find anything in the history?
After it became clear that darcs wasn't going to win the next gen source control wars I switched to mercurial. I now use and love git for its own charms, but I'd love to come across mercurial again professionally.
I own up to my preference to rewrite history—git has facilitated that in equal measure to mercurial—but my first source control love is mercurial queues. Queues taught me how to structure and sequence my changesets, and through that the structure of codebase evolution. The user experience is still unmatched by any patch queue on git.
It's worth looking at hg-git. It works brilliantly --- seamless interoperability between hg and git; you just tell hg to clone a git repository and it Just Works. Merges, branches, tags, the lot, but with sensible commands and workflow.
There are a few rough edges; creating a new branch (git branches are mapped onto hg bookmarks) is a bit clunky, and it's easier to create the branch at the git end and then do an hg pull to get all the metadata set up, but I mainly use it with github and github's UI for handling branches is pretty good.
Ah yes, changeset evolution, or, as I like to think of it, how to do rebasing properly. However, try convincing git aficionados that there's a much safer way of rebasing than git rebase. :-(
Every couple of months I get bummed out Mercurial lost the mindshare war years ago. I used Mercurial before Git and it was perfectly fine and easy to reason about. http://hginit.com/ helped me start out, and it was amazing to be able to work on code without blocking other team members.
I know Git now not because it's nice to use, but due to rote memorization and muscle memory.
I'm very excited about this release. I would like to promote my own small and insignificant contribution to it.
I made a few improvements to the template engine to make it easier to write your own templates. An example is the new built-in `hg log --template=status` or `hg log -T status` for short. For each commit it displays file additions, removals, and modifications using the same style as `hg status`. Copies are displayed if you pass the --copies/-C flag, just like `hg status` too. You can see this template in the map-cmdline.status file in the installed Mercurial templates directory:
I especially like this example because it exhibits Mercurial's extensibility and overall philosophy very well. Rather than cluttering the CLI with a bunch of extra obscure options (such as a hypothetical --status option), we provide a generic mechanism where more advanced users can hook their own customisations into. We do not complicate the UI for the uncommon case.
Mercurial truly rocks. Yes, Git seems to have won the mindshare of developers in the OSS world, but Mercurial is quite strong in a corporate environment. And for some reason HgLab [1] (of which I am the author of) seems to be quite popular in medical institutions.
Some really exciting updates in here. It seems that while Git is popular for open source projects (thanks to GitHub), Mercurial is popular for internal repos and companies. That's personally how I use it.
I'd still use Mercurial if I could but every library/framework I use on a regular basis lives in a git repo so I just stopped fighting the current and learnt enough git to keep my sanity.
Mercurial does everything that git does (in fact, you can pull from or push to git repos with hg-git), has a UI that's easier to learn, and has online help that is terse and helpful. As far as killer features go, check out phases[1] and changeset evolution[2]. The latter is still at alpha level and the UI is unstable, but I use it for day-to-day work and find it incredibly useful.
[1] https://mercurial.selenic.com/wiki/Phases
[2] https://bitbucket.org/marmoute/mutable-history