¿Cómo usar 'git reset --hard HEAD' para volver al commit anterior?

Sé que Git rastrea los cambios que realizo en mi aplicación y los conserva hasta que los confirmo, pero aquí, donde colgué:

Cuando quiero volver a la confirmación anterior, uso:

 git reset --hard HEAD 

Y git devuelve:

 HEAD is now at 820f417 micro 

¿Cómo devuelvo los archivos de mi disco duro a la confirmación anterior?

Mis próximos pasos:

 git add . git commit -m "revert" 

Pero ninguno de los archivos ha cambiado en mi disco duro ...

¿Qué estoy haciendo bien / mal?

735
02 марта '12 в 9:36 2012-03-02 09:36 establecido por Brian McDonough 02 de marzo de 2012 a las 9:36 2012-03-02 09:36
@ 2 respuestas

En primer lugar, siempre vale la pena señalar que git reset --hard es un comando potencialmente peligroso, ya que descarta todos los cambios no confirmados. Por razones de seguridad, siempre debe asegurarse de que la salida de git status esté limpia (es decir, vacía) antes de usarla.

Primero dices lo siguiente:

Entonces, sé que Git rastrea los cambios que realizo en mi aplicación, y permanece vigente hasta que los haga, pero aquí, donde cuelgo:

Esto es incorrecto Git registra solo el estado de los archivos cuando los coloca (utilizando git add ) o cuando crea un compromiso. Una vez que haya creado un compromiso en el que los archivos de su proyecto se encuentran en un estado determinado, son muy seguros, pero hasta ese momento Git no hizo un seguimiento de los cambios en sus archivos. (Por ejemplo, incluso si hace git add para crear una nueva versión de un archivo, se sobrescribirá la versión preparada anteriormente de este archivo en el área de preparación).

En tu pregunta, entonces pides lo siguiente:

Cuando quiero volver a la confirmación anterior, uso: git reset --hard HEAD Y git devuelve: HEAD ahora está en 820f417 micro

¿Cómo puedo hacer que los archivos de mi disco duro vuelvan a la confirmación anterior?

Si ejecuta git reset --hard <SOME-COMMIT> entonces Git será:

  • Haga que su rama actual (normalmente master ) vuelva al punto <SOME-COMMIT> .
  • Luego, haga que los archivos en su árbol de trabajo e índice ("área de preparación") sean iguales a las versiones corregidas en <SOME-COMMIT> .

HEAD apunta a tu rama actual (o confirmación actual), por lo que todo eso es git reset --hard HEAD eliminará todos tus cambios sin fijar.

Entonces, supongamos que un buen compromiso al que desea devolver es f414f31 . (Puede encontrarlo en git log o en cualquier navegador de historial). Luego tiene varias opciones diferentes según lo que quiera hacer:

  • En su lugar, cambie la rama actual para que apunte a una confirmación anterior. Puedes hacer esto con git reset --hard f414f31 . Sin embargo, esto vuelve a escribir el historial de tu hilo, así que debes evitarlo si compartes este hilo con alguien. Además, las confirmaciones que realizó después de f414f31 ya no estarán en el historial de su rama master .
  • Cree un nuevo compromiso que represente el mismo estado del proyecto que f414f31 , pero simplemente lo agrega a la historia para que no la pierda. Puede hacer esto siguiendo los pasos sugeridos en esta respuesta , algo como:

     git reset --hard f414f31 git reset --soft HEAD@{1} git commit -m "Reverting to the state of the project at f414f31" 
846
02 марта '12 в 11:32 2012-03-02 11:32 Mark Longair, el 02 de marzo de 2012, da la respuesta a las 11:32 2012-03-02 11:32

ADVERTENCIA: git clean -f eliminará los archivos sin seguimiento, lo que significa que han desaparecido para siempre, ya que no se almacenan en el repositorio. Asegúrese de que realmente desea eliminar todos los archivos sin seguimiento antes de hacer esto.


Prueba esto y ve a git clean -f .

border=0

git reset --hard no eliminará los archivos sin git reset --hard , mientras que git-clean eliminará los archivos del directorio raíz monitoreado que no estén bajo el rastreo de Git.

Como alternativa, como dijo @Paul Betts, puedes hacerlo (pero ten cuidado, también elimina todos los archivos ignorados)

  • git clean -df
  • git clean -xdf ATENCION! Esto también eliminará los archivos ignorados.
170
02 марта '12 в 9:48 2012-03-02 09:48 la respuesta es el uday 02 de marzo '12 a las 9:48 2012-03-02 09:48

Otras preguntas sobre tags o Haz una pregunta