This is pretty simple to do outside of die-hard "continuous integration" shops -- most of the time I can just do
git rebase -i HEAD~4
(where '4' is the number of little dumb commits I made) and squash them all into the first commit.
But if I made a few commits, then pulled in someone's changes, then made a few more... well... http://xkcd.com/1597/
But if I made a few commits, then pulled in someone's changes, then made a few more... well... http://xkcd.com/1597/