- Isolate ongoing developments on branches.
- Pull and merge/rebase from upstream often.
- Push often if you want others to be able to base work on your changes.
- Upstream should never have to resolve a merge conflict.
- Whoever wrote the code should merge the code.
- Don't change the history of a public branch.
- Communicate with other developers about a branching strategy ahead of time.