Quelles sont les différences entre "--squash " et "--no-ff --no-commit"?

Que l'on doit on utiliser pour cacher microcommits?

Est la seule différence entre git merge --squash et git merge --no-ff --no-commit la négation de l'autre des parents?