Tant qu'on n'a pas fait de gc, en effet, on peut retrouver les vieux commits. Mais ça a rarement de l'intérêt pour moi. En général, on se fout des commits incomplets / buggés / de test qu'on a faits au cours du temps.
J'utilise la fonctionnalité connue comme réécriture d'historique (même si techniquement elle n'en est pas, nous sommes d'accord) locale quotidiennement, et la réécriture d'historique distante forcée (sur un repo que je suis le seul à utiliser, je vous rassure

) quasi-quotidiennement.
Dans l'historique publié, la bisectabilité est utile, même dans les petits projets (`git bisect` m'a déjà aidé plusieurs fois au boulot), ne parlons pas du kernel Linux où elle est absolument indispensable. Or, le commit-and-fix nuit gravement à cette bisectabilité, alors que la réécriture d'historique est un des principaux outils de cette bisectabilité.