I and another guy needs to share a named branch but it is not supposed to be seen/pulled by third party until it is ready. Is there a way to push a branch only between us? Thanks
There is no easy built-in way where you can share changesets and still not accidentally push them to a central server.
What I would do would be to clone the repository into a separate place and use that as a synchronization point.
Let's say you're using bitbucket, and want to work on some changes before making them available to the public. You would clone the repository to a private repository, giving you both access, and you could push and pull with that central repository to your hearts content. At some point you're ready, and then you push to the public central repository and delete the private one.
You could also set up local clones where you can push and pull between you, but not push to the central repository.
Here you would clone the repository on your local machines, and then change the .hg\hgrc file to point to your friends repo, so that you can both pull and push with each other. At some point you would then use hg push url-to-central-repo
to push to the central repo and share your changesets.
There is also the use of the phase system you could use, but in this case it would add some hassle that I'm not sure you would like. Basically you would flag your changesets as secret, which will prohibit them from being pushed. However, in order for you to push your changesets to your friend, you would have to temporarily change their phase, push, and then change it back. You could use the batch file from this Stack Overflow question to help out: Push secret changesets.
I would recommend you go with the central private repository. Easier to set up, doesn't involve having to push and pull between computers potentially behind firewalls and routers, and gives you all the power you're used to from your normal central repository.