What does a mercurial revision with no parent mean?
mercurial
Solution
When you look at the definition of a changeset, you see:
Each changeset has zero, one or two parent changesets:
- It has two parent changesets, if the commit was a merge.
- It has no parent, if the changeset is a root in the repository. There may be multiple roots in a repository (normally, there is only one), each representing the start of a branch.
"Updating" back to a changeset which already has a child, changing files and then committing creates a new child changeset, thus starting a new branch. Branches can be named.
So maybe this is what you did:
- updating back to 53 (which had already a child '54' of its own back then)
- changing files
- committing, thus starting a new branch from 54, with no parent (that would make a second commit with the same parent)
or:
- comitting 53 with a `--close-branch` option,
- potentially a new commit (without switching back to another branch) might begin a new one
Ry4an (an actual Mercurial specialist ;) ) chimes in and comments:
`--close-branch` doesn't do anything except hide a branch from a list, and it's undone next time you commit on that branch. It won't create multiple roots.
VonC is right in his diagnosis, multiple heads. But no combination of '`update`' and '`commit`' will get you into that state. To end up with multiple roots one usually has done a '`hg pull`' from repo and used `--force` to override an "`unrelated repositories`" warning.
("no parent", meaning the parent ids are set to 00000, see "behind the scene":
(source: red-bean.com) )
Problem
I have a Mercurial repository that is in a strange state now. This is what it looks like in TortoiseHG: I didn't think this would be possible. Revision 54 has a parent of "-1 (000000000000)" (i.e. nothing). There's clearly something I don't understand yet about Mercurial, can anyone let me know what this means - and what must have happened for it to get into this state. As far as I know, it's only had stuff pushed and pulled from it - and nobody has been using any wacky extensions. Revisions 54 and 55 were just adding tags, but if I 'update -C' to revision 54 I end up with ONLY the .hgtags file. I've made a clone from revision 53 to fix this. But I'd rather understand what happened here, so I can avoid it happening again.