2010-03-05 24 views
6

Antecedentes: Trevor estaba trabajando en un proyecto de prueba con el único propósito de probar git. Se trata de un repositorio local de una sola persona que no ha sido compartida por lo que Trevor hizo un restablecimiento completo con el fin de destruir algunas confirmaciones no deseados:Rama anónima después de hacer restablecer git

:git reset --hard 6aa32cfecf4 
    HEAD is now at 6aa32cf auto commit Sun Feb 28 16:00:10 -0800 2010 

Entonces Trevor fue junto felizmente añadiendo nuevos commit en el proyecto. Luego, cuando Trevor miró la representación gráfica del historial de compromisos, Trevor descubrió que parece haber una rama anónima de los commits borrados. No aparece como una rama que usa la rama git, pero aparece en la GUI.

Preguntas 1: ¿Cómo puede Trevor deshacerse de esta "sucursal anónima" ... y qué es lo que realmente está mirando Trevor? ¿Cuáles son algunos consejos para ayudar a Trevor a entender lo que sucedió cuando Trevor hizo el restablecimiento completo para que Trevor pueda establecer mejor las expectativas de Trevor?

preguntas 2: Suponiendo Trevor tenían compartieron el proyecto con otras personas. ¿Cuál sería la alternativa para hacer lo mismo (o algo similar) sin hacer un restablecimiento completo?

+1

¿Qué es una interrupción? –

+0

@AndrewWillems Trevor – dreftymac

Respuesta

4

Como se menciona en The illustrated guide to recovering lost commits with Git, puede recuperar confirmaciones "perdidas" (como en "ya no se hace referencia por una rama o una etiqueta").
Es por eso que todavía se muestran en gitk.
Por ejemplo, a:

$ git fsck −−lost-found 

También habría mostrarlos.

Para limpiar esto (suponiendo que tenga nada para volver desde cualquier otra operación de borrado)

$ git gc --aggressive 
$ git prune 

Véase también git gc: cleaning up after yourself.


Si esa rama había sido compartida, una posible alternativa hubiera sido una git revert con el fin de hacer un nuevo commit cancelar las n los anteriores.

3

Puede crear una nueva bifurcación mediante una confirmación.

Si su última confirmación en su rama anónima es 123e43 que puede hacer:

git checkout -b my_branch 123e43e

Ahora su rama no es anónimo. Puede fusionar o volver a establecer la base en su rama principal