It’s not the mechanism of branching that I prefer.
It’s the fact that Mercurial tags the commit with the name of the branch that it was committed to which makes it much easier to determine whether a commit is included in your current branch or not.
It’s the fact that Mercurial tags the commit with the name of the branch that it was committed to which makes it much easier to determine whether a commit is included in your current branch or not.
Isn’t this trivial in Git too? git branch --contains COMMIT ?
Sure, if you want to do it once, but Git still has to compute that information (save for a new-ish cache that is just that, a cache). But that is not the point really, the point is that Mercurial’s graph Is the same (topologically) everywhere, which is not the case in Git because branches (and thus remotes) have different names. So saying that a branch contains a commit is not the same as a commit being on a branch. There are a bunch of great properties that emerge from this but it’s too long for this comment and I should actually properly write this down at some point this year.
Given that Git and Mercurial were both created around April 2005 to serve the same purpose by very similar people for the same reason… I’d say it’s fair!
It’s definitely up with Git in my opinion. I much prefer the branching in Mercurial.
It’s certainly very offensive to lump it in the same band as SVN and TFVC.
What could possibly be preferrable to
git switch -c <branchname>
?It’s not the mechanism of branching that I prefer.
It’s the fact that Mercurial tags the commit with the name of the branch that it was committed to which makes it much easier to determine whether a commit is included in your current branch or not.
Also, Mercurial has a powerful revision search feature built in which I love (https://www.mercurial-scm.org/doc/hg.1.html#revisions).
I admit that I have been bitten by the fact that commits don’t have a “true home branch”.
Isn’t this trivial in Git too?
git branch --contains COMMIT
?Sure, if you want to do it once, but Git still has to compute that information (save for a new-ish cache that is just that, a cache). But that is not the point really, the point is that Mercurial’s graph Is the same (topologically) everywhere, which is not the case in Git because branches (and thus remotes) have different names. So saying that a branch contains a commit is not the same as a commit being on a branch. There are a bunch of great properties that emerge from this but it’s too long for this comment and I should actually properly write this down at some point this year.
Given that Git and Mercurial were both created around April 2005 to serve the same purpose by very similar people for the same reason… I’d say it’s fair!