If there have been no "commits to the production
branch yet" then the branch doesn't yet exist. In mercurial's named branches a branch name is an indelible label on a committed changeset. A changeset never changes what branch it's on. I'm going to assume you've got at least one changeset with the production
branch label or this turns into a no-problem question.
If you take these actions I think you'll end up okay:
hg update
to the revision you wish was the production head
hg branch production
this just says the next commit should have the production label
hg commit
you'll now have a new commit with the label production
Now when people do a clone of just production:
hg clone repopath#production
or
hg clone -r production repopath
or update to it
hg update production
They'll get the branch of development you want. That old changeset(s) will still (and always will) have the production
label, but that's likely okay. If it's really not okay you could rebuild the repo and remove the labels from those commits, but the process above gets people cloning/updating production
the right stuff, so you should be fine.