Saber utilizar un sistema de control de versiones como Git otorga a los desarrolladores un control total sobre cada línea de código que escriben.
Una de las mayores ventajas de Git es su capacidad para actuar como una red de seguridad: cuando cometes un error en tu proyecto, existen herramientas precisas para deshacer y rehacer cambios en Git sin perder el control de la aplicación.
A lo largo de esta guía técnica profundizaremos en el funcionamiento de la herramienta, el uso de git commit --amend, las diferencias entre los modos de git reset, la alternativa moderna git restore, la seguridad de git revert y la salvación de emergencia con git reflog.
Entendiendo las tres zonas de Git antes de deshacer cambios
Para aplicar correctamente cualquier comando git de reversión, es necesario comprender la arquitectura interna de un repositorio local, la cual se divide en tres estados o zonas principales:
- Directorio de trabajo (Working Directory): La carpeta donde modificas y editas activamente tus archivos de código.
- Área de preparación (Staging Area o Index): La zona intermedia donde organizas y confirmas los archivos mediante
git addantes de guardarlos de forma definitiva. - Historial del repositorio (Repository / HEAD): La base de datos donde se almacenan las confirmaciones permanentes (commits).
Imagina que el historial de git es como un diario de viaje. Cada confirmación (commit) es una página grabada. Deshacer un cambio implica decidir si quieres modificar la última página escrita, sacar elementos del borrador o redactar una página nueva que cancele el contenido de una anterior.
1. Rehacer el último commit con git commit –amend
¿Alguna vez has confirmado un commit y segundos después te has dado cuenta de que olvidaste incluir un archivo o escribiste mal el mensaje de confirmacion?
🔴 ¿Quieres Aprender a Programar con Python? 🔴
Descubre el Full Stack Jr. Bootcamp - Aprende a Programar desde Cero de KeepCoding. La formación más completa del mercado y con empleabilidad garantizada
👉 Prueba gratis el Bootcamp Aprende a Programar desde Cero por una semanaEl comando git commit --amend permite modificar o rehacer el ultimo commit registrado en tu rama actual, combinando las nuevas modificaciones con la confirmación previa.
Ejemplo práctico de uso:
# 1. Crear una confirmación inicial
$ git commit -m "Primer commit con funcionalidad incompleta"
# 2. Agregar el archivo o corrección olvidada al área de preparación
$ git add archivo_olvidado.txt
# 3. Rehacer la confirmación previa con el mensaje corregido
$ git commit --amend -m "Primer commit con el archivo olvidado incluido"
Resultado en el historial: Git reescribirá el último punto de guardado. En lugar de mostrar dos confirmaciones desordenadas, el registro limpio mostrará una sola confirmación como si el olvido nunca hubiera ocurrido.
2. Deshacer cambios en el área de preparación (Staging Area)

Si ejecutaste la instrucción git add . y preparaste por accidente archivos que no deseabas incluir en la próxima confirmación, puedes sacarlos del área de preparación sin perder tus modificaciones en el disco.
Método tradicional con git reset:
# Sacar un archivo específico del área de preparación
$ git reset archivo_incorrecto.txt
Método moderno con git restore (Git 2.23+):
Desde la versión 2.23 de Git, la comunidad introdujo la orden git restore para separar las responsabilidades ambiguas del antiguo checkout:
# Deshacer la preparación del archivo enviándolo de vuelta al directorio de trabajo
$ git restore --staged archivo_incorrecto.txt
Este procedimiento es 100% seguro: no elimina las líneas de código editadas, simplemente las devuelve al estado no preparado (unstaged).
3. Descartar cambios no confirmados en un archivo modificado
Cuando has editado un archivo en tu directorio de trabajo y deseas revertirlo por completo a su estado original (descartando todas las modificaciones locales no guardadas):
Método clásico con git checkout:
# Descartar los cambios locales en un archivo específico
$ git checkout -- archivo.txt
Método moderno con git restore:
# Restaurar el archivo al estado del último commit de la rama
$ git restore archivo.txt
¡Atención técnica importante! Este comando destruye de forma permanente los cambios no confirmados en ese archivo específico. Utilízalo únicamente cuando estés seguro de que no necesitarás esa información.
4. Revertir commits de forma segura con git revert
Cuando un commit defectuoso ya ha sido confirmado y enviado a un repositorio remoto compartido (como GitHub o GitLab), reescribir el historial está desaconsejado porque causaría conflictos a tus compañeros de equipo.
El comando git revert es el aliado ideal para proyectos colaborativos: en lugar de borrar la página del historial, crea una nueva confirmación que aplica exactamente los cambios inversos.
# 1. Consultar el historial para identificar el identificador (hash)
$ git log --oneline
# 2. Revertir el último commit mediante la referencia HEAD
$ git revert HEAD
# 3. Revertir un commit específico del pasado introduciendo su ID
$ git revert a1b2c3d
El historial de Git se mantiene intacto y transparente, añadiendo un commit explícito que indica la neutralización del fallo previo.
5. Mover el puntero de la rama con git reset: Soft, Mixed y Hard
La orden git reset permite mover el puntero de la rama actual (HEAD) hacia un commit anterior. Su comportamiento varía según el flag de ejecución utilizado:
| Modo de Git Reset | Estado de la zona de Staging | Estado del Directorio de Trabajo | Escenario de uso ideal |
|---|---|---|---|
git reset --soft HEAD~1 |
Conserva los cambios preparados. | No modifica ningún archivo. | Deshacer una confirmación para reagrupar cambios antes de un nuevo commit. |
git reset --mixed HEAD~1 (Por defecto) |
Elimina los cambios del área de preparación. | Conserva las modificaciones en los archivos del disco. | Deshacer la preparación y la confirmación para reorganizar el trabajo local. |
git reset --hard HEAD~1 |
Borra el área de preparación. | Elimina de forma permanente las modificaciones de los archivos. | Descartar por completo todo el trabajo realizado desde la confirmación indicada. |
6. Salvación de emergencia: Recuperar commits perdidos con git reflog
Si ejecutaste accidentalmente un git reset --hard y crees que has perdido confirmaciones de código importantes, Git mantiene una bitácora secreta llamada reflog.
El registro git reflog guarda todos los movimientos realizados por el puntero HEAD en tu máquina local durante los últimos 90 días, permitiéndote resucitar commits huérfanos:
# 1. Consultar la bitácora histórica de movimientos de HEAD
$ git reflog
# Salida típica de terminal:
# e4f5a6b HEAD@{0}: reset: moving to HEAD~1
# c1d2e3f HEAD@{1}: commit: Agregar funcionalidad de autenticacion
# 2. Restaurar la rama exacta al estado anterior al desastre
$ git reset --hard c1d2e3f
Buenas prácticas indispensables para la gestión del historial
Para mantener tu flujo de desarrollo limpio y profesional, aplica estas recomendaciones cotidianas:
- Evita reescribir el historial en ramas públicas: Nunca utilices
git reset --hardnigit commit --amendsobre ramas remotas compartidas (comomainodevelop). - Confirma cambios con frecuencia: Realizar pequeñas confirmaciones atómicas facilita aislar y revertir fallos específicos sin afectar a otras áreas de la aplicación.
- Redacta mensajes descriptivos: Detallar el motivo de las modificaciones simplifica la identificación de confirmaciones problemáticas en el futuro.
Cómo conectar el dominio de Git con tu futuro laboral
Controlar las herramientas de control de versiones y saber reaccionar ante errores de código es una competencia básica requerida en cualquier equipo informático.
Si estás organizando tu plan de estudio desde cero, te invitamos a consultar nuestra guía sobre qué aprender primero en programación.
Comprender cómo interactúan las capas de desarrollo analizando la diferencia entre frontend, backend y full stack te dará la perspectiva idónea para estructurar tus proyectos.
Durante la construcción de tus aplicaciones, administrarás tus repositorios sabiendo qué es Git y por qué es tan importante para trabajar en equipo.
A nivel de persistencia de datos en el servidor, garantizarás la consistencia comprobando qué es ACID en bases de datos.
En organizaciones avanzadas que automatizan sus procesos de despliegue, este aprendizaje se conecta directamente con comprender qué es MLOps y por qué es clave en ingeniería de software.
Para aquellos desarrolladores que buscan especializarse en la gestión de infraestructura en la nube y automatización de servidores, recomendamos explorar el Programa Técnico Avanzado en DevOps con IA y LLMops.
Conclusión
Dominar los comandos para deshacer y rehacer cambios en Git no solo te salva de cometer errores graves, sino que optimiza tu flujo de trabajo y la colaboración con tu equipo.
Saber cuándo aplicar amend, restore, reset o revert te proporcionará la confianza necesaria para experimentar y construir código de alta calidad.
Aprender las mejores prácticas de desarrollo con el acompañamiento de expertos en activo es el acelerador más potente para consolidar tu perfil profesional.

Si quieres aprender a programar desde cero, dominar el control de versiones con Git y GitHub, maquetar tus propios proyectos reales y contar con el respaldo de nuestra Bolsa de Talento activa, descubre el Bootcamp Aprende a Programar desde Cero de KeepCoding y transforma tu futuro profesional hoy mismo.
Asimismo, para consultar la guía oficial de referencia sobre la herramienta, puedes acceder al apartado de documentación oficial de Git sobre deshacer cosas.



