¿Cómo eliminar los commit innecesarios de git?

Tengo algunos commits de basura en mi git repositry. Estos han sido creados, por ejemplo, mediante la git gui cuando se cambia el último commit nuevamente y accidentalmente se crean commits adicionales.

Ahora tengo algunos commits sin CABEZA asignada (separada, no parte de ninguna twig).

Como quiero arreglar, mi pregunta es: ¿cómo puedo eliminar estos commits (ver F, G y H)? ¿Esto se hace usando rebase o revertir o restablecer? ¿O usando otra herramienta? ¿En qué compromiso debo sentarme para hacerlo?

A -- B -- C -- D -- E [master] \-- F -- G \-- H 

Gracias

cristiano

Prueba esto:

 git reflog expire --expire=now git gc --prune=now 

Haz lo siguiente:

 git config gc.reflogexpireUnreachable = now git gc --prune=now git config gc.reflogexpireUnreachable = 3 days