Cómo aplastar el historial de commit de git hasta hace 5 commits

Mi repository tiene una gran cantidad de compromisos y me gustaría aplastar todo hasta las últimas cinco confirmaciones, por lo que al final el repository tendría un compromiso de squash y luego mis cinco compromisos más recientes.

Antes de:

10 9 8 7 6 5 4 3 2 1 

Después:

 10 9 8 7 6 squash commit 

Probé el reinicio de git –soft al final y al principio de la parte aplastada, pero no estoy seguro de cómo mantener mis últimos cinco commits, que desaparecen cuando aplasto la porción antes de los cinco.

Usa git rebase -i --root . (Si su git no es lo suficientemente nuevo para tener --root en su rebase interactiva, es un poco más doloroso ya que primero debe crear una twig "huérfana"). Se le presentará una session de editor en un file que se parece a esto :

 pick b9491ea commit-10 pick d1574b8 commit-9 ... pick ab31c0f commit-1 # Rebase ... # [commentary with instructions] 

Cambia los commits de 2 a 5 para "squash", save, salir del editor, y rebase squash commits confirma 2 a 5 en una copy de commit # 1, y luego agrega copys de commits 6 a 10. El repo resultante tendrá copys del confirmaciones finales (y ninguna de las confirmaciones originales; bueno, todavía están allí, ahora son invisibles y, finalmente, serán recogidas).

(También tendrás la oportunidad de corregir el text de compromiso del compromiso aplastado).