1. Branch off of master to work on the feature
2. Work, work, work, commit, commit, commit
3. Pull down any updates to master
4. Rebase and squash the feature branch to master’s HEAD
5. Merge the feature branch back to master
6. Push up to the shared repository
Their Rational for Step 6:"When you’re ready to share this feature with the rest of your team, they probably won’t care about all your interim commits (for example, you added and then changed feature.py). We can package up all the commits into one big commit (sort of like the one big patch against master you used before) by using git’s rebase command."
Some of the history that was used in developing the feature may be useful for someone else trying to a) figure out how the code works or b) trying to fix a bug in the program. By chunking the development of the feature into on patch you eliminate the nuances which would have helped later on.
Even beyond the development concerns, version control systems have great power to model your actual development process. Not just the one that is on paper, but the one that produces the code which ships. By eliminating history of development you loose the ability to discover this useful information. So don't rebase your feature branch merge into the mainline.