You could achieve this easily with GitExtensions by 2 ways.
The first is to do exactly the same thing but from the GUI which is suitable when you don't want to use the existing commit messages of the commits you watch to squash. .
git reset --soft HEAD~<number of commits to squash>
From the history browser of GitExtensions, right click on the last commit you want to keep and select 'reset branch to here'. Then select the option 'soft'.
git commit
Then commit the changes that are still staged.
The second is to a 'rebase --interactive' :
Right click on the same commit described above and select 'rebase on'. In the pop-up check the checkbox 'interactive'.
Then, in the editor, set the commit action to 'squash'. Read a good documentation on the interactive rebase before doing it. This solution is perfect when you want to write a good commit message built from the commits messages from the commits you are squashing.