Cómo deshacerse de todas las confirmaciones de git anteriores sin perder los cambios

Hice un montón de pequeños commits y ahora quiero deshacerme de todos ellos de la historia para que, si hago git log it, solo muestre uno como máximo. Pero no quiero perder ninguno de los cambios que hice. Así que, básicamente, mi último compromiso se convierte en el compromiso inicial. ¿Cómo puedo hacer eso?

git rebase -i y marque todos los commits (excepto el primero) con s , eso significa squash. Todos los commits serán aplastados en uno.

Tenga en count que al hacer esto, está reescribiendo el historial, y si este es un repository público, afectará a cualquiera que ya haya sacado del repository.