I keep 2 sources locally. One is a copy of trunk called 'base', obtained with bzr pull. The other is my development branch (in fact I have 3). I use the bzr gui, which does these basic things very well and very easily.
All my branches use a shared repository. This makes pulls, pushes, and merging much faster.
Workflow:
- pull changes from launchpad to 'base'
- merge base into 'dev'
- make changes, do work, etc
- commit changes in dev. Often more than one commit.
- check if new changes are in base. If so, repeat steps 1 and 2 to ensure that there are no change conflicts.
- push changes from dev to my repository on launchpad. Kovid reviews and merges from there.
I have both base and dev so I can run from either to help debug, have rapid access to the change logs and diffs, and rarely to add print statements in the trunk code to help see what is going on. In the latter case, I revert the branch before pulling from launchpad.