Deshacer el último commit
Deshacer el Último Commit
Si aún no has hecho push
-
Para mantener los cambios en el área de staging (index):
Terminal window git reset --soft HEAD~1Este comando deshace el último commit pero deja los cambios en el área de staging, listos para ser modificados y confirmados nuevamente si es necesario.
-
Para eliminar los cambios completamente:
Terminal window git reset --hard HEAD~1Esto elimina el último commit y los cambios que contenía. ⚠️ Precaución: Cualquier cambio en el directorio de trabajo desde el último commit se perderá.
-
Para modificar el commit (mensaje o archivos):
Terminal window git commit --amend -m "Nuevo mensaje"Este comando permite editar el último commit. Puedes cambiar el mensaje o añadir archivos adicionales antes de confirmar de nuevo.
Si ya has hecho push
-
Revertir el commit creando un nuevo commit de reversión:
Terminal window git revert <hash_del_commit>Esto crea un nuevo commit que invierte los cambios del commit especificado, sin modificar el historial. Si hay conflictos, deberás resolverlos antes de continuar.
-
Obtener el hash del commit a revertir:
Terminal window git logUsa
git log
para encontrar el hash del commit que deseas revertir y úsalo en el comandogit revert
de arriba.
Opciones avanzadas (Nivel experto)
-
Editar el historial de commits localmente:
Terminal window git rebase -i HEAD~nCon
git rebase -i
, puedes modificar el historial local de commits. Esto permite cambiar el orden, combinar, editar o eliminar commits. ReemplazaHEAD~n
con el número de commits que deseas editar en el historial. -
Forzar el push tras modificar el historial:
Terminal window git push --force-with-lease⚠️ Precaución: Solo usa
rebase
ypush --force-with-lease
en ramas donde trabajas solo o en casos donde todos los colaboradores estén informados y de acuerdo en reescribir el historial.
Explicación de los comandos y parámetros clave
-
git reset
: Restaura el índice y el directorio de trabajo a un commit específico.--soft
: Deshace el commit sin modificar el índice ni el directorio de trabajo, dejando los cambios en el área de staging.--hard
: Restaura el índice y el directorio de trabajo al commit especificado, eliminando cualquier cambio realizado desde ese commit.
-
HEAD~1
: Representa el commit anterior al último.HEAD
es un puntero al último commit en la rama actual;~1
mueve ese puntero un commit atrás. -
--force-with-lease
: Es una alternativa más segura a--force
al hacerpush
. Este comando solo forzará elpush
si tu copia local está al día respecto a la versión en el remoto, previniendo sobrescribir cambios de otros colaboradores por error.