Deshacer el cambio más reciente en GIT

logo de git

A veces subimos cosas a git que luego no queremos que estén subidas. Es relativamente habitual hacer un commit y darnos cuenta luego que no hemos subido exactamente lo que queríamos o que se ha subido algún fichero de más. Nos gustaría deshacer el cambio. ¿Cómo lo deshacemos?

Si no has subido con push el cambio al servidor remoto, el mecanismo es fácil.

El comando git reset hace que tu copia de trabajo apunte a un commit concreto, borrando de tu repositorio local todos los commit posteriores. Tu copia local de trabajo la deja como esté, por lo que no pierdes los cambios que has metido por error.

Tienes que tener ojo con esto, pierdes toda la historia de git posterior al commit al que hayas decidido ir. Si tu copia local no tiene las cosas que te interese mantener, tendrá que volver a hacerlas.

Si quieres deshacer justo el último commit, el comando es

git reset HEAD~

HEAD es el commit de tu repositorio local al que apunta tu directorio de trabajo. Habitualmente, HEAD suele ser el último commit, es decir, el erróneo que quieres deshacer. Puedes indicar commits anteriores con HEAD~1, HEAD~2, etc, según quieras el commit anterior, o dos anteriores, etc. Como abreviatura, HEAD~1 se puede poner simplemente como HEAD~. También es posible poner HEAD~<hash-del-commit> para ir a uno concreto sin necesidad de contar commits.

Una vez ejecutado el comando, el último commit se deshará de nuestro repositorio local, pero nosotros tendremos la copia de trabajo tal cual la teníamos, sin cambios. Ya solo nos queda corregir lo que fuera que hubieramos hecho erróneo y volver a hacer el commit.

Resumen: Para deshacer el cambio más reciente en un commit de git, si no lo has subido al servidor con un push

  • git reset HEAD~
  • // Corregir en local lo que necesitemos
  • git add … // si queremos añadir ficheros nuevos.
  • git commit …. // meter los cambios correctos.

Algunos detalles a tener en cuenta

HEAD~ funciona bien si la historia hacia atrás es más o menos lineal. Si tu commit es de hacer un merge entre dos ramas, HEAD~ elegirá una de ellas, quizás no la que quieras. En ese caso, quizás es mejor usar HEAD~<hash-del-commit>

Otra opción para deshacer cambios es git revert. La diferencia es que git revert realiza un nuevo commit para deshacer los cambios. Es decir, en los commits tendrás el commit erróneo más un nuevo commit que deshace los cambios del commit erróneo. Puede ser interesante si no estás seguro de querer perder el commit erróneo.

Esta entrada ha sido publicada en git y etiquetada como , , . Guarda el enlace permanente.

Una respuesta en “Deshacer el cambio más reciente en GIT

  1. Pingback: git reset: soft, mixed y hard. | Diario de Programación

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.