Deshacer la última confirmación de Git en un repositorio local

John Wachira 15 febrero 2024
Deshacer la última confirmación de Git en un repositorio local

Este artículo discutirá cómo podemos deshacer la última confirmación en Git. Esto es útil cuando queremos eliminar los cambios introducidos por un commit antes de enviarla al repositorio remoto.

Saltemos directamente.

Deshacer la última confirmación sin modificar archivos en Git

Comenzaremos discutiendo cómo podemos deshacer un commit mientras se realizan las modificaciones anteriores en los archivos. Para hacer esto, usamos el comando git reset con el argumento -soft para indicarle a Git que conserve el contenido de nuestro archivo.

$ git reset --soft HEAD~1

El comando anterior eliminará la última confirmación en nuestro HEAD.

Veamos un ejemplo. Aquí está el historial de commits en nuestro repositorio local.

$ git log --oneline --graph
* c5bf6c8  (HEAD -> master) Added a new file named "file.txt"
* 3b641e0  Second commit
* 21ca1e7  Initial commit

Ejecutemos el comando git reset y verifiquemos su impacto en nuestro repositorio local.

reiniciar

El resultado anterior muestra que nuestro file.txt está en nuestro índice, pero el commit no está presente. Podemos hacer modificaciones al archivo y confirmarlo nuevamente.

$ git log --oneline --graph
* c5bf6c8  (HEAD -> master) (HEAD)
* 3b641e0  Second commit (HEAD~1)
* 21ca1e7  Initial commit (HEAD~2)

Nuestro comando $ git reset --soft HEAD~1 elimina la última confirmación. Si tuviéramos que eliminar las dos últimas commits, en su lugar habríamos usado $ git reset --soft HEAD~2 y así sucesivamente.

A veces, es posible que queramos eliminar el compromiso y los archivos. Usamos el comando git reset con la opción -hard, como se muestra a continuación.

$ git reset --hard HEAD~1

El comando anterior eliminará todas las modificaciones asociadas con el commit de nuestro índice y directorio de trabajo.

Veamos un ejemplo. Aquí hay una imagen de nuestro historial de commits.

$ git log --oneline --graph
* c5bf6c8  (HEAD -> master) Added a new file named "file.txt"
* 3b641e0  Second commit
* 21ca1e7  Initial commit

En este escenario, nos gustaría eliminar la última confirmación y eliminar las modificaciones.

Corremos:

$ git reset --hard HEAD~1
HEAD is now at 3b641e0 Second commit

Ejecutemos el comando git status para comprobar el estado de nuestro repositorio.

estado de Git

El resultado anterior muestra que Git eliminó los archivos de nuestro índice y directorio de trabajo.

También es posible que debamos deshacer la última confirmación y conservar los cambios en el directorio de trabajo, pero en nuestro índice. Para hacer esto, agregamos la opción --mixed a nuestro comando git reset, como se muestra a continuación.

$ git reset --mixed HEAD~1

Veamos un ejemplo. Este es el estado actual de nuestro historial de commits.

$ git log --oneline --graph
* c5bf6c8  (HEAD -> master) Added a new file named "file.txt"
* 3b641e0  Second commit
* 21ca1e7  Initial commit

Corremos:

$ git reset --mixed HEAD~1

Nuestros archivos deben estar visibles en el directorio de trabajo pero ausentes en el índice. Confirmemos esto con el comando git status.

confirmar con el estado de git

Podemos ver que nuestro archivo.txt está debajo de archivos sin seguimiento. Esta es otra forma de deshacer un commit mientras se conservan las modificaciones.

John Wachira avatar John Wachira avatar

John is a Git and PowerShell geek. He uses his expertise in the version control system to help businesses manage their source code. According to him, Shell scripting is the number one choice for automating the management of systems.

LinkedIn

Artículo relacionado - Git Commit