Here’s an interesting blog post by one of the Mercurial developers, in response to some questions from Git partisans grumbling about having to use Mercurial.
I still think Git is better at the foundation and in usage, but there are things I would steal from Mercurial. One thing Git really needs is a way to make rebase palatable even after you’ve pushed to others. Mercurial has a feature called changeset evolution that might be what I want: https://air.mozilla.org/changesets-evolution-with-mercurial/. Another interesting feature in Mercurial is that you can tag commits with “secret” (hg phase-fs) to prevent them from being pushed by default.
I need to do some timing tests to see what happens to Mercurial when you have repositories with lots of files in them (1 million+), since their manifest is flat, as opposed to using the direntry-style that Git uses (tree objects). But on the other hand, Git has a lot of tree objects due to this.