This is the workflow that I try to stick to, with scripts to facilitate this workflow given here. The basic idea is to have at least two repositories:
(a) a general "central" remote repository, that serves as the canonical "primary" repo for all developers; code pushed here should always be (more or less) unbroken and functional, passing all tests, etc.
(b) a personal "work-in-progress"/development remote repository, which serves as a remote back-up for local or sub-team development. Code here can be in any state. Taking full advantage of Git's cheap branching, generally the wip topic development line should be in their own branches (as described in the above links), until ready for prime time. When the time comes around, merge into your local master, and then push this to the "primary" repository, and delete the wip branches from both your local as well as your personal remote development repos.
Optionally, you might want a third repo, for public (i.e., non-project team) consumption.
You also may want to look here for a description of a similar yet different workflow. By the way, the Pro Git book given in the previous link is, in my opinion, the single best Git resource currently out there.