Just say you have a development branch with 100 mostly pointless commit/log messages. Is it possible to merge the dev branch to the master/head and have only one log message in the master branch? ie one log message on the head/master branch might say "Adds features XYZ"
It seems there are two correct answers. Using squash allows you to hide all of the commits from the master branch, and using interactive rebase allows you to hide selected parts of the history from the master branch.