Reescribiendo el historial de commit de git

Suponiendo que tenemos un historial de commit de git que se ve así:

ZZ [origen / maestro] A -> B -> C -> D -> E [maestro]

Queremos:

  • Rebobina el historial de nuevo a antes de A
  • Mantenga el directory de trabajo de E
  • Agrupe todos los sets de cambios de A..E en una única confirmación.
  • Empuja el resultado a control remoto.

El resultado debería verse así:

ZZ -> XX [maestro] [origen / maestro]

Donde XX es la confirmación que abarca los cambios de confirmaciones anteriores A..E

Puedes probar:

 git reset --hard E git reset --soft ZZ git commit 'comment' git push orgin master 

–suave

No toca el file de índice ni el tree de trabajo en absoluto (pero restablece el encabezado, como lo hacen todos los modos). Esto deja todos los files modificados "Cambios que se comprometerán", ya que el estado de git sería putit.