Phases are Mercurial's way of marking changesets `public` (published), `draft` (unpublished), or `secret`. Public changesets cannot easily be rebased, etc., providing a level of safety when mutating repositories.
Phases were introduced in Mercurial 2.1: they allow one to keep track of which changesets have been shared/published (public) and which ones have not (draft and secret). Destructive repository changing operations like rebase are not allowed on public changesets as other repositories may be based on these.
Information about the phases of various revisions can be seen with the hg phase command:
hg phase REV