I think squashing is useful for a feature branch whose history looks like:
1d9322f Added model & migration for feature x
3fa93f9 Unit tests for feature x
38ce239 Fixed intermittent failure in test_feature_x_foo
6728eca Added view and css for feature x
8fed23d Added missing background image for feature x
392ea84 Refactored feature x controller to handle foobaz
Instead of littering the master branch with those 6 commits, wouldn't it be nice to have just: 84fac31 Added feature x with tests and support for foobaz
This has the advantage of1) Less noise in history, so easier to page through and see what has happened
2) The feature is in a single commit, so I can more easily cherry-pick it into a release branch if I need it
3) Impressing your co-developers as it looks like you got it right the first time