Cómo deshacer modificaciones de archivos

Cuando hacemos la modificación que no debimos nunca hacer, ¿cómo damos marcha atrás? En este vídeo os muestro cómo deshacer cambios locales y cómo sacar cambios del stage.

Cuando trabajamos con Git, es muy común encontrarnos en situaciones en las que hemos modificado un archivo y, por error, queremos deshacer esos cambios para recuperar la versión anterior. Afortunadamente, Git nos ofrece varias herramientas para manejar estos casos y evitar perder trabajo accidentalmente.

Imaginemos que estamos trabajando en un proyecto web y modificamos el archivo index.html. Por ejemplo, eliminamos un párrafo que indicaba que el sitio estaba en construcción para actualizarlo con un mensaje que diga que la página está a punto de abrirse. Guardamos los cambios y recargamos la página para ver cómo queda. Pero, ¿qué pasa si nos damos cuenta de que hemos borrado algo que no queríamos eliminar?

Si no usamos Git, recuperar ese párrafo puede ser complicado o imposible. Sin embargo, si el archivo está registrado en el repositorio, podemos revertir esos cambios fácilmente. Para ello, Git nos muestra en el estado del repositorio que el archivo index.html está modificado. Podemos ver exactamente qué ha cambiado con git diff.

Para deshacer los cambios locales en un archivo modificado, Git nos permite usar el comando git checkout -- index.html. Este comando restaura el archivo a su última versión confirmada en el repositorio, descartando las modificaciones locales. Así, si recargamos la página, veremos que el párrafo eliminado ha vuelto a aparecer.

Pero la cosa se complica si ya hemos agregado el archivo modificado al área de staging con git add. En ese caso, intentar usar git checkout -- index.html no funcionará porque Git ya considera que esas modificaciones están preparadas para ser confirmadas. Para revertir esta situación, podemos usar git reset HEAD index.html. Este comando quita el archivo del área de staging, devolviéndolo a un estado de cambio local sin preparar. Ahora sí, podemos usar de nuevo git checkout -- index.html para descartar los cambios y recuperar la versión anterior.

Este flujo nos permite manejar con seguridad los cambios en nuestros archivos, evitando perder trabajo por errores accidentales. Además, cuando hacemos un commit y nos damos cuenta de que olvidamos incluir algún archivo o queremos modificar el mensaje, Git nos ofrece la opción de enmendar el último commit con git commit --amend. Esto nos permite agregar cambios o corregir el mensaje sin crear un nuevo commit, manteniendo el historial limpio.

Para ilustrar estos comandos, aquí tenemos un ejemplo práctico:

# Modificamos el archivo index.html y queremos descartar los cambios locales
git checkout -- index.html

# Si ya hemos agregado el archivo al área de staging y queremos quitarlo de ahí
git reset HEAD index.html

# Ahora podemos descartar los cambios locales
git checkout -- index.html

# Si queremos enmendar el último commit para agregar un archivo olvidado
git add archivo-olvidado.txt
git commit --amend

Con estas herramientas, podemos trabajar con mayor confianza en nuestros proyectos, sabiendo que Git nos ayuda a corregir errores y mantener un historial limpio y coherente. En futuras ocasiones, exploraremos cómo deshacer commits y otras técnicas avanzadas para manejar nuestro código de forma segura y eficiente.

Lista de reproducción
  1. 1
    ¿Qué es Git?
    4 minutos
  2. 2
    Cómo instalar Git
    9 minutos
  3. 3
    Creando tu primer commit
    9 minutos
  4. 4
    Qué es el staging area
    10 minutos
  5. 5
    Cómo deshacer modificaciones de archivos
    7 minutos
  6. 6
    Cómo deshacer un commit con reset
    7 minutos
  7. 7
    Cómo revertir un commit con revert
    7 minutos
  8. 8
    Introducción a las ramas
    6 minutos
  9. 9
    Cómo crear y modificar ramas
    6 minutos
  10. 10
    Commits bajo el workflow Feature Branch
    6 minutos
  11. 11
    Cómo fusionar ramas con merge
    6 minutos
  12. 12
    Fusiones conflictivas
    9 minutos
  13. 13
    Cómo construir alias
    7 minutos
  14. 14
    Más sobre conflictos
    9 minutos
  15. 15
    Etiquetas
    7 minutos
  16. 16
    Tags anotados
    9 minutos
  17. 17
    git stash: esconder cambios
    6 minutos
  18. 18
    Introducción a remotos
    5 minutos
  19. 19
    Pusheando a un remoto
    6 minutos
  20. 20
    Clonando y haciendo pull
    6 minutos
  21. 21
    Fetch y pull rebases
    8 minutos
  22. 22
    Rebase
    7 minutos
  23. 23
    Rebase interactivo
    6 minutos
  24. 24
    Master, main y otros nombres de rama
    9 minutos
  25. 25
    git switch
    9 minutos
  26. 26
    git-restore
    10 minutos
  27. 27
    git-grep
    11 minutos
  28. 28
    Gitignore
    11 minutos
  29. 29
    El flag --patch
    9 minutos
  30. 30
    git-apply y parches en bruto (advanced)
    9 minutos
  31. 31
    Merge octopus (advanced)
    9 minutos
  32. 32
    Conventional commits
    12 minutos
  33. 33
    Merge and squash (GitLab / GitHub...)
    6 minutos
  34. 34
    git merge --squash
    7 minutos
  35. 35
    git-bisect
    8 minutos
  36. 36
    git-blame
    6 minutos
  37. 37
    git-reflog
    10 minutos
  38. 38
    Git para la Bash
    11 minutos
  39. 39
    Submódulos (parte 1)
    7 minutos
  40. 40
    Submódulos (parte 2)
    10 minutos
  41. 41
    Otros clientes Git (último episodio)
    9 minutos