Como Eliminar el Último Commit de GIT
Introducción
El propósito principal al emplear un sistema de control de versiones como Git es, indudablemente, conservar un historial preciso e inalterado de todas las etapas por las que ha atravesado el código fuente de un proyecto. A medida que realiza modificaciones en el código y se efectúan commits, su historial se expande progresivamente. En cualquier momento, se tiene la capacidad de examinar el estado exacto que tenía un archivo en cualquier punto del pasado y, además, identificar quién llevó a cabo un cambio específico, lo cual resulta de gran utilidad. No obstante, en ocasiones, se puede agregar inadvertidamente a este historial cosas que no tenían porque añadir. Por ejemplo, se podría hacer un commit sin intención, incluir archivos innecesarios, o incorporar un molesto error que preferiríamos que nadie notara y que se nos haya escapado.
Se tratará el caso en el que se refiere exclusivamente a borrar el último commit realizado.
El Commit aún no Está en Github
Este es el caso más común y fácil, cuando el commit áun no se ha empujado al repo remoto (Github, GitLab, Bitbucket,...), se tiene tres casos posibles:
Volver al Penúltimo Commit Borrando los Últimos Cambios
Si lo que se necesita es volver al estado que tenía el repo en el penúltimo commit , es decir, borrar todos los cambios realizados, se debe correr en línea de comandos del terminal el siguiente comando:
git reset HEAD^ --hard
Este comando elimina el último commit del historial, dejando la carpeta de trabajo tal cual estaba en el penúltimo commit y ahora este se convierte en el último.
Volver al Penúltimo Commit Sin Perder los Cambios Actuales
En este caso no se desea perder los cambios, ya sea porque lo único que se debe hacer es corregir un archivo y no más, en este caso se usa el siguiente comando:
git reset HEAD^ --soft
Sólo se Debe Incluir Algunos Archivos
En algunos casos lo único que hace falta es incluir algún archivo que se haya omitido por cualquier motivo, se puede incluir en el último commit sin necesidad de borrarlo con el siguiente código:
git add .
git commit --amend --no-edit
git push origin --force
Primero se añaden los archivos para luego incluirlos en el último commit . En este caso no se edita el mensaje del commit .
El Commit ya Está en Github
En este caso se debe tener en cuenta que el commit ya fue empujado al servidor remoto, puede ser Github, Bitbucket, Gitlab o similar.
Hay una condición inflexible, los dos repos, el local y el remoto deben estar sincronizados, es decir, se debió haber usado el comando git pull
para sincronizar el repo local con el remoto o haberlo descargado con git clone
.
Primero, se debe destruir el último commit , para ello se usa el comando:
git reset HEAD^ --hard
Y luego se debe sincronizar forzosamente este cambio al repo remoto, con el comando:
git push origin -f
Donde origin es el nombre del repo remoto.
Se debe tener mucho cuidado al usar este último comando, porque en el caso que el repo remoto vaya por delante al repo local toda esta información será destruida y este repo quedará igual al local.