Deshaciendo cambios: restore, reset, revert — correcto y peligroso
Uno de los temas más solicitados en entrevistas y en el trabajo real es cómo deshacer lo que ya se ha hecho. Analizaremos tres herramientas con diferentes 'niveles' de deshacer y nos centraremos en lo más importante: mostraremos escenarios concretos donde reset --hard puede arruinar el trabajo en equipo, mientras que revert es una alternativa segura. Soluciones buenas y malas, con consecuencias reales.
- Podrás deshacer cambios con confianza en cualquier etapa: en el directorio de trabajo, en el índice y en el historial de commits.
- Entenderás la diferencia fundamental entre reset y revert y sabrás en qué situaciones es apropiado usar cada uno.
- Aprenderás a evitar los errores típicos que cometen los principiantes al deshacer cambios en un repositorio compartido.
Phần đầu bài giảng
Git restore: el botón de deshacer para archivos
- Git restore — deshace cambios no confirmados
- Funciona como el botón 'deshacer' en un editor
- Es seguro — no modifica el historial de confirmaciones
- Devuelve los archivos al último estado guardado
Imagina que accidentalmente guardaste un archivo con un error y quieres volver atrás. Git restore actúa como un botón mágico de deshacer — devuelve los archivos al último estado confirmado. A diferencia de otros comandos de deshacer, restore funciona solo con cambios no confirmados y es completamente seguro para el historial de tu proyecto. Es la primera herramienta a la que debes recurrir cuando hagas cambios accidentales y necesites una solución rápida sin arriesgar el historial de cambios.
Deshaciendo cambios en el directorio de trabajo
- git restore archivo.txt — devuelve el archivo al último commit
- Deshace todos los cambios en el directorio de trabajo
- Es seguro — los cambios se pueden recuperar a través del editor
- Verifica el estado con git status antes de restaurar
Supongamos que has estado editando un archivo de configuración durante media hora, pero te das cuenta de que vas por mal camino. En lugar de deshacer cada cambio manualmente, ejecuta git restore config.yml. El archivo volverá inmediatamente al estado del último commit. Es como si simplemente cerraras el archivo sin guardar, pero con la garantía de volver a una versión funcional.
# Demostración de restauración de archivo
$ echo "Cambios erróneos" > main.py
$ git status
$ git restore main.py
$ cat main.py
$ git status
Eliminando un archivo del índice
- git restore --staged archivo.txt — elimina el archivo del índice
- Conserva los cambios en el directorio de trabajo
- Precaución: sin --staged se perderán los cambios
- Siempre verifica git status antes de ejecutar
Un error común es añadir accidentalmente al índice un archivo que no debería estar allí. Por ejemplo, si ejecutas git add punto e incluyes un archivo temporal de configuración. El comando git restore con la bandera staged y el nombre del archivo config.tmp lo eliminará cuidadosamente del índice, pero mantendrá todos los cambios en el directorio de trabajo. Sin la bandera staged, perderías tu trabajo, por lo que siempre es importante verificar el estado con git status antes de ejecutar restore. Ahora sabes cómo deshacer cambios antes del commit. Pero, ¿qué pasa si el error ya está en el historial? Ahí es donde entra en juego git reset.
# Se añadió accidentalmente un archivo al índice
$ git add config.tmp
$ git status
# Eliminar del índice, manteniendo los cambios
$ git restore --staged config.tmp
$ git status
# Verificar que el archivo permanece en el directorio de trabajo
$ ls -la config.tmp
Bài giảng đầy đủ dành cho thuê bao
Còn 24 slide nữa trong phiên bản đầy đủ.
Video, toàn bộ slide, ghi chú, bài kiểm tra, gia sư AI và phỏng vấn sẽ mở sau khi đăng nhập và đăng ký thuê bao.
Đăng nhập hoặc đăng ký Đăng ký thuê baoNội dung bài giảng
- Git restore: el botón de deshacer para archivos
- Deshaciendo cambios en el directorio de trabajo
- Eliminando un archivo del índice
- Git reset: cómo funciona el rebobinado del historial
- Reset --soft seguro: cambios en el índice
- Reset --mixed estándar: cambios en el directorio de trabajo
- Peligro: reset --hard elimina cambios SIN POSIBILIDAD de recuperación
- Reset: tres modos, un solo comando
- git reset --soft: reescribiendo el historial de forma segura
- Cuándo usar --mixed y --hard
- Lista de verificación: ¿qué reset elegir?
- ¿Por qué no podemos simplemente borrar un error?
- Cómo funciona git revert en la práctica
- Revertir múltiples confirmaciones a la vez
- Reset: reescribiendo el historial localmente
- Revert: deshaciendo cambios de forma segura
- Qué ocurre al hacer push: reset vs revert
- Por qué reset --hard es peligroso
- Ejemplo de pérdida de cambios
- Cómo recuperar datos
- Peligros del retroceso en ramas compartidas
- Retroceso seguro con revert
- Secuencia correcta de acciones
- Cuándo usar: restore, reset o revert
- Reglas para trabajar con historial personal y compartido
- Guía paso a paso ante un error
- Conclusiones y tarea: El señor de las deshaceres
Bài viết liên quan đến bài học này
- Lệnh Git: bảng tra cứu với ví dụ dùng hằng ngày
- git checkout, switch và restore: khi nào dùng cái nào
- git reset và git revert: cách hoàn tác commit mà không phá lịch sử nhóm
- git reflog: cách khôi phục commit và nhánh đã mất
- Git và GitHub: khác nhau thế nào và liên hệ ra sao
Tất cả bài giảng của khóa học
- Introducción: Git desde cero hasta desarrollador seguro
- Por qué necesitamos Git y por qué es imprescindible para conseguir trabajo
- Instalación y configuración: preparando Git para su primer uso
- Primer repositorio: init, add, commit y la magia del índice
- Leyendo el historial: log, diff, show y navegación por el pasado
- Ramas: la realidad paralela de tu código
- Deshaciendo cambios: restore, reset, revert — correcto y peligroso
- GitHub y repositorios remotos: tu código en la nube
- Trabajo en equipo: forks, ramas de características y pull requests
- Conflictos de fusión: no entres en pánico, comprende y resuelve
- Flujos de trabajo con Git en equipos reales: ¿qué workflow elegir?
- Herramientas avanzadas: rebase, stash, cherry-pick y etiquetas
- Proyecto final: simulando un desarrollo en equipo real