About branching
This is what I usually do when working with branches on a project. I use to keep the main trunk and each release on separate branches, which has proven to be useful for bugfixes.
Right after publishing (and pushing) a new release, create a local checkout for that release:
$ cd /devel/project/releases
$ bzr checkout sftp://bazaar.server/remote/bazaar/repo/project/trunk 1.0
Then create a public repo for it:
$ cd 1.0
$ bzr unbind
$ bzr push sftp://bazaar.server/remote/bazaar/repo/project/relases/1.0
Now you can work on the local release branch and locally commit all your changes. When ready, push the changes to the public repo:
$ bzr merge sftp://bazaar.server/remote/bazaar/repo/project/relases/1.0
$ bzr commit
$ bzr push
Last thing, merge the relase branch changes in the main trunk:
$ cd devel/project/trunk
$ bzr merge sftp://bazaar.server/remote/bazaar/repo/project/relases/1.0
$ bzr commit
$ bzr push