restaurar - volver a un commit anterior git




¿Cómo uso 'git reset--hard HEAD' para volver a un commit anterior? (2)

Esta pregunta ya tiene una respuesta aquí:

Sé que Git hace un seguimiento de los cambios que hago en mi aplicación, y los conserva hasta que los confirmo, pero aquí es donde estoy colgado

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

git reset --hard HEAD

Y Git regresa:

HEAD is now at 820f417 micro

¿Cómo puedo revertir los archivos en mi disco duro a ese compromiso anterior?

Mis siguientes pasos fueron:

git add .
git commit -m "revert"

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

¿Qué estoy haciendo bien / mal?


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

Inicialmente dices lo siguiente:

Así que sé que Git hace un seguimiento de los cambios que hago en mi aplicación, y los conserva hasta que los confirmo, pero aquí es donde estoy colgado:

Eso es incorrecto Git solo registra el estado de los archivos cuando los escalones (con git add ) o cuando creas un commit. Una vez que ha creado una confirmación que tiene sus archivos de proyecto en un estado particular, son muy seguros, pero hasta entonces Git no está realmente "haciendo un seguimiento de los cambios" en sus archivos. (Por ejemplo, incluso si git add para preparar una nueva versión del archivo, eso sobrescribe la versión previamente preparada de ese archivo en el área de preparación).

En su pregunta, continúe y pregunte lo siguiente:

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

¿Cómo puedo revertir los archivos en mi disco duro a ese compromiso anterior?

Si realiza git reset --hard <SOME-COMMIT> , Git:

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

HEAD apunta a su rama actual (o confirmación actual), por lo que todo lo que git reset --hard HEAD hará es deshacerse de cualquier cambio no confirmado que tenga.

Entonces, supongamos que el buen compromiso al que desea volver es f414f31 . (Puede encontrarlo a través git log o de cualquier navegador de historial). Luego, tiene algunas opciones diferentes dependiendo de lo que quiere hacer exactamente:

  • Cambia tu rama actual para que apunte a la confirmación anterior en su lugar. Podrías hacer eso con git reset --hard f414f31 . Sin embargo, esto es volver a escribir el historial de su sucursal, por lo que debe evitarlo si ha compartido esta sucursal con alguien. Además, las confirmaciones que hiciste después de f414f31 ya no estarán en la historia de tu rama master .
  • Cree un nuevo compromiso que represente exactamente el mismo estado del proyecto que f414f31 , pero solo lo agrega al historial, para que no pierda ningún historial. Puedes hacerlo siguiendo los pasos sugeridos en esta respuesta , algo como:

    git reset --hard f414f31
    git reset --soft [email protected]{1}
    git commit -m "Reverting to the state of the project at f414f31"
    

ADVERTENCIA: git clean -f eliminará los archivos sin seguimiento, lo que significa que se han ido para siempre, ya que no están almacenados 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 .

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

Alternativamente, como dijo @Paul Betts, deberías hacer git clean -xdf (aunque ten cuidado, eso también elimina todos los archivos ignorados).







git-revert