In other words, in Git, a branch is just a named pointer to a particular revision. In Hg, these are called &#x27;bookmarks&#x27; and they work exactly how you&#x27;re imagining; and there is an immutable sort of bookmark that is called a &#x27;tag&#x27; (bookmarks can be repointed; tags cannot). By creating a new head (i.e. branching) and naming that new head with a bookmark, you do exactly what `git branch` does.<p>Mercurial also supports an autonaming of revisions which automatically applies to all child revisions, too: these are meant to be independent lines of development with their its own head revision, and are called &#x27;named branches&#x27;; that is what `hg branch` does. The problem that you&#x27;re identifying (and that I agree is counterintuitive!) is that these names become part of the commits themselves and therefore public knowledge. Mercurial warns you when you `hg branch` that this is happening and says &quot;did you want a bookmark?&quot; but does not tell you, e.g., &quot;to undo what you just did, type `hg branch default`.&quot;