The intended workflow is:
- Create a private branch off a public branch.
- Regularly commit your work to this private branch.
- Once your code is perfect, clean up its history.
- Merge the cleaned-up branch back into the public branch.
Explains how Git default workflow is designed to solve the tension between frequent commits and history readability/safety.
Other readings which enlighted me:
- Understanding Git conceptually
- Git branching model
- http://tomayko.com/writings/the-thing-about-git
- Git from the bottom up (or, for a simplified introduction http://nfarina.com/post/9868516270/git-is-simpler)