Implements the Git Squash command. It needs the repository were he is going to make the squash,
the squash commit message, and the start commit, to know from where he has to squash.
It return an Empty Optional because is not necessary to return anything.
It throws a
GitException
if something bad happens.