2011-02-15 33 views
20

Estoy confundido. Quiero volver a una confirmación anterior que identifiqué en "registro de git".Git: volver al estado de confirmación anterior

Pero cuando hago "git checkout", no obtengo dicha confirmación. Nada cambia. Me dice que estoy en el modo HEAD desconectado, pero los archivos que quiero no están allí.

¿Qué efecto estoy haciendo mal?

MrB

Respuesta

18

git reset --hard <commit> Desde la página de manual:

Partidos del árbol de trabajo y el índice a la del árbol que se cambiaron a. Cualquier cambio en los archivos rastreados en el árbol de trabajo se pierde.

git checkout es para cambiar su directorio de trabajo a una rama diferente o confirmar. Esto no mueve el HEAD allí.

+0

De nuevo, 'reset' es para restablecer su índice y directorio de trabajo a un estado anterior. 'checkout' es para verificar una nueva o diferente sucursal. Una vez que te acostumbras, no es tan confuso. =) –

+1

Visite http://www.gitready.com/ y http://learn.github.com/p/intro.html para obtener interesantes tutoriales, y luego http://gitref.org para obtener una referencia cuando ' re listo –

+0

En realidad, puede usar 'git checkout' para cambiar su árbol de trabajo al estado de cualquier confirmación: si no está revisando una rama, desconectará HEAD, pero todo funciona bien. (Por ejemplo, eso es típicamente lo que haces cuando tratas de encontrar el último commit bueno cuando comienzas un 'git bisect'.) –

9

NO git reset -hard ¡es PERMANENTE!

Utilice

git stash -u 

lugar! Si tienes una pieza de trabajo allí que eliminas por accidente, todavía puedes recuperarla. Esto nunca llega a su control remoto a menos que elija hacerlo creando una rama y empujándolo hacia arriba.

Además, está en el camino correcto que puede usar git checkout para lograr lo mismo. La sintaxis es

git checkout HEAD -- . 

pero tiene el mismo problema que git reset --hard. Quédese con el alijo y ahorrará perder su cabello en el futuro.

más larga respuesta

Las soluciones anteriores se revierten todos los cambios. Sin embargo, usted preguntó cómo deshacerse de algunos de los cambios. Añadiré esto para completarlo.

Para hacer esto, puede

git add file1 file2 file3 
git stash save --patch 

Ahora se le preguntará qué es exactamente lo que quiere hacer dissappear ... a lo que cada vez el nivel de granularidad. Por lo tanto, puede "rechazar" de manera segura solo algunos cambios en un único archivo si decide hacerlo.

+4

¿Qué sucede si quiero que sea permanente? A veces comienzo a hacer cambios que no quiero volver a ver nunca más. –

+1

"NO reiniciar, ¡es PERMANENTE!" no, no es así, ¿qué pasa con 'git reflog'? – YemSalat

+0

Sí, tenga en cuenta que esta respuesta es incorrecta ... 'git reset --hard' solo cambia permanentemente el código no confirmado –

Cuestiones relacionadas