Eliminar una confirmación sin reference del repository de git

Tengo un historial de cometer git como este:

U / A---B---C---D---E master 

Nada apunta al compromiso U , pero sé que es hash. ¿Cómo puedo eliminar completamente este compromiso de mi repository como si nunca hubiera existido? Soy la única persona que usa este repository.

Traté de usar git rebase , pero eso puede eliminar partes de una twig o mover confirmaciones, pero no parece ser capaz de eliminar una sola confirmación.

Si hago git checkout <hash> y luego git reset --hard HEAD~1 Ya no veo el commit. ¿Se ha ido completamente o todavía está escondido en el repository?

Finalmente, Git lo limpiará, pero puedes ver git gc para forzar la recolección de basura.

El command clean es diferente y no se ocupará de esto por ti.

Como se describe aquí , simplemente use

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

git reflog expire --expire-unreachable=now --all elimina todas las references de commits inalcanzables en reflog .

git gc --prune=now elimina los commits ellos mismos.

Atención : solo usar git gc --prune=now no funcionará, ya que las confirmaciones aún se referencen en el reflog. Por lo tanto, borrar el reflog es obligatorio.