Saltar al contenido

¿Cómo uso ‘git reset –hard HEAD’ para volver a una confirmación anterior?

septiembre 23, 2021
apple touch icon@2

Primero, siempre vale la pena señalar que git reset --hard es un comando potencialmente peligroso, ya que elimina todos los cambios no confirmados. Por seguridad, siempre debe comprobar que la salida de git status está limpio (es decir, vacío) antes de usarlo.

Inicialmente dices lo siguiente:

Entonces sé que Git rastrea los cambios que hago en mi aplicación, y los mantiene hasta que confirmo los cambios, pero aquí es donde estoy colgado:

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

En su pregunta, continúe preguntando lo siguiente:

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

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

Si lo haces git reset --hard <SOME-COMMIT> entonces Git:

  • Haga su rama actual (normalmente master) de nuevo para apuntar a <SOME-COMMIT>.
  • Luego haga que los archivos en su árbol de trabajo y el índice («área de preparación») sean los mismos que las versiones comprometidas en <SOME-COMMIT>.

HEAD apunta a su rama actual (o compromiso actual), así que todo eso git reset --hard HEAD hará es deshacerse de cualquier cambio no comprometido que tenga.

Entonces, suponga que el buen compromiso al que desea volver es f414f31. (Puedes encontrar eso a través de git log o cualquier navegador de historial). Luego tiene algunas opciones diferentes dependiendo exactamente de lo que quiera hacer:

  • En su lugar, cambie su rama actual para que apunte a la confirmación anterior. Podrías hacer eso con git reset --hard f414f31. Sin embargo, esto está reescribiendo el historial de su rama, por lo que debe evitarlo si ha compartido esta rama con alguien. Además, las confirmaciones que hiciste después f414f31 ya no estará en la historia de tu master rama.
  • Cree una nueva confirmación que represente exactamente el mismo estado del proyecto que f414f31, pero solo agrega eso al historial, para que no pierda ningún historial. Puede 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"
    
close