2011-08-07 32 views
11

Tengo algunos commits de basura en mi git repositry. Estos han sido creados por ej. el guion git al cambiar el último commit nuevamente y accidentalmente crear commits adicionales.¿Cómo eliminar las confirmaciones de git innecesarias?

Ahora tengo algunas compromete por ahí sin cabeza asignado (individual, no es parte de cualquier rama).

Como quiero poner en orden, mi pregunta es: ¿Cómo puedo eliminar estas confirmaciones (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

+0

posible duplicado de [Listado y eliminación de confirmaciones Git que están bajo ninguna rama (colgando?)] (http: // stackoverflow .com/questions/3765234/listing-and-deleting-git-commits-that-are-under-no-branch-colgando) – hunse

Respuesta

17

Prueba esto:

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

Eso no cambió nada. Lo siento –

+1

@Christian Wolf: Si eso no cambia nada, sus confirmaciones F, G y H son referidas por * algo *. ¿Quizás tienes una etiqueta que los señala? ¿O un alijo? No lo sabemos –

+0

@Christian: ¿Ha verificado usando 'git fsck --unreachable' que estos commits están de hecho colgando? De lo contrario, ninguna cantidad de gc/prune los eliminará. Primero debe eliminar la (s) referencia (s). – cdhowie

0

hacer el siguiente:

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