What does a mercurial revision with no parent mean?

后端 未结 2 1798
自闭症患者
自闭症患者 2021-02-15 15:07

I have a Mercurial repository that is in a strange state now. This is what it looks like in TortoiseHG:

\"Hg

2条回答
  •  孤独总比滥情好
    2021-02-15 15:47

    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)
    )

提交回复
热议问题