Como Deshacer Commits en Git (Forma Local y Remota) – Parte 2 (Final)

6 minuto(s)

En la Primera Parte de este tutorial aprendimos a deshace commits de manera local, la manera local es el entorno inicial en donde se realizan los cambios que posteriormente son publicados el repositorio remoto como GitHub, BitBucket, etc. En esta segunda parte y última vamos aprender a deshacer commits de manera remota, vamos con este Post.

Partes

Antes de continuar, te invito a leer los siguientes artículos para que estés familiarizado con este tutorial:

Asimismo te invito a escuchar el Podcast: “Dominio del trabajo con Varios Lenguajes de Programación”:

Spotify SoundCloud Apple Podcasts

Bien ahora continuemos con el Post: Como Deshacer Commits en Git (Forma Local y Remota) – Parte 2 (Final). 

Para este Post haré uso de este repositorio el cual pertenece al tutorial llamado Como Crear un Reloj Digital (Numérico) con JavaScript.

Bueno ahora pasemos a realizar operaciones en el repositorio de manera remota.

Deshaciendo Remotamente Commits ya Enviados

En ocasiones hacemos cambios en un repositorio local que no son necesarios y aún así lo enviamos por descuido a nuestro repositorio remoto. Ahora debemos pensar en hacer cambios en el proceso, porque también otros usuarios que tienen acceso al repositorio remoto, puede extraer los últimos cambios y usarlos como si no se cambiara el historial de git.

El mejor enfoque y más seguro es aceptar el error y crear un commit adicional para retirar los cambios innecesarios. Al hacer esto, el historial de git será estable, pero el error estará allí para siempre.

Lo primero que haremos es ver el historial de commits escribiendo el comando git log –oneline en nuestra consola de comandos.


Puedes ver que al inicio de cada fila hay un string que es el git commit id o también llamado git commit hash, luego viene la información de la rama que viene con el mensaje de git commit. Si tienes muchos commits y no puedes salir de ellos, puedes presionar la tecla q para poder salir.

Al principio puedes ver que HEAD indica la última confirmación en la rama actual, entonces podemos hacer uso del comando git revert en nuestro último commit escribiendo git revert HEAD.


Luego de ejecutar el comando anterior, se me abrirá el archivo COMMIT_EDITMSG en mi editor de texto predeterminado, yo uso Sublime Text 3.

En la consola se queda el mensaje Waiting for your editor to close the file… (Esperando a que su editor cierre el archivo …) .

Al inicio del archivo abierto en el editor podemos leer el texto que dice Revert “Cambios”, bueno lo voy a editar y le pondré “Cambios Realizados”, luego guardo el archivo y cierro el editor y en la consola de comandos se me ejecuta nuevamente de manera automática el comando git revert HEAD y me aparece el cambio del texto que he realizado.


Y si ejecuto de nuevo el comando git rever HEAD se me volverá a abrir el editor de código y podré ver el cambio realizado.

O si vuelvo a revisar el historial de commits con el comando git log –online, puedo ver que el mensaje del último cambio fue editado correctamente.


Entonces ahora tengo un commit adicional de git revert que deshace los cambios en el commit de “Cambios” al no interferir con el historial de git. Esta es la operación más segura que deberías preferirse hacer en la mayoría de los casos.

Deshaciendo Remotamente varios Commits

Supongamos que estas trabajando en una rama que a nadie le importa todavía. Solo estas implementando funciones experimentales. Entonces ha llegado el momento, debes enviar una solicitud de extracción con su rama de características.

Pero sucede que tienes muchos commits innecesarios y los quieres deshacer, lo primero que debes hacer es ejecutar el comando git log –oneline para verificar que la rama se confirma.


Y supongamos que luego elegimos mantener solo algunos commits y deshacernos de los demás. Hay un comando git genial que es git rebase interactive. Solo necesitamos pasarle como punto de partida un git commit id.

Seleccionaré el commit id e05abff  dentro del comand git rebase interactive.


Se me abrirá el archivo git-rebase-todo en mi editor de código predeterminado y en la consola se queda el mensaje Waiting for your editor to close the file… (Esperando a que su editor cierre el archivo …) .

En el archivo, para los commits que quiero eliminar coloco la letra d en vez de la palabra pick. Puedes ver en la siguiente imagen que coloco una letra d en ves de la palabra pick a los commits que quiero eliminar.

Paso seguido guardo los cambios y cierro mi editor de código, en la consola se ejecuta automáticamente los cambios.


Y si ejecuto el comando git log –oneline puedo ver que los commits desaparecieron.


Con esto entonces nos deshacemos de los commits no deseados. No olvides que es una operación destructiva y debes usarla con precaución.

Conclusión

En este Post que consta de 2 partes hemos aprendido a deshacer ciertos commits de manera local y remota. Conforme practiques los comandos mencionados, lograrás dominarlos.

Nota (s)

  • No olvides que debemos usar la Tecnología para hacer cosas Buenas por el Mundo. 

Síguenos en nuestras Redes Sociales para que no te pierdas nuestros próximos contenidos.