git-restore

Con el comando git-restore se pueden deshacer modificaciones hechas a archivos. Como ya se podía hacer con git-checkout, pero sin utilizar un comando que vale para ocho cosas diferentes. Otros flags de restore que cuento hoy: --staged, --workdir, --source.

El comando git restore ha llegado para facilitarnos la vida a la hora de deshacer cambios en nuestros archivos modificados o en el área de staging. Tradicionalmente, para revertir modificaciones en un archivo habíamos usado git checkout -- archivo, pero este comando puede resultar confuso porque originalmente está pensado para cambiar de ramas o mover el HEAD. Con git restore tenemos una herramienta más clara y específica para restaurar archivos a su estado original.

Imaginemos que modificamos el archivo readme.md y añadimos una línea como hola mundo. Si ejecutamos git status, veremos que el archivo aparece como modificado. Para ver exactamente qué hemos cambiado, usamos git diff. Hasta ahora, para deshacer esos cambios, habríamos usado:

git checkout -- readme.md

Este comando lo que hace es traer la versión del archivo que está en el commit actual de la rama en la que estamos, por ejemplo, main, y reemplazar el archivo modificado en nuestro directorio de trabajo. Así, el archivo vuelve a su estado original y desaparecen los cambios.

Sin embargo, con git restore podemos hacer esto de forma más intuitiva y directa. Simplemente ejecutamos:

git restore readme.md

Y el archivo vuelve a su estado original, sin necesidad de entender que realmente estamos trayendo la versión del commit actual. Esto hace que el comando sea más fácil de recordar y usar, especialmente para quienes empiezan con Git.

Pero git restore no solo funciona para el directorio de trabajo, también nos permite manipular el área de staging. Por defecto, cuando ejecutamos git restore archivo, solo afecta al directorio de trabajo, es decir, deshace los cambios que aún no hemos añadido al staging. Si el archivo ya está en staging, git restore no lo tocará.

Para retirar un archivo del área de staging, usamos la opción --staged:

git restore --staged readme.md

Esto mueve el archivo del área de staging de vuelta al directorio de trabajo, como si dijéramos espera, no quiero incluir este archivo en el próximo commit todavía. Es muy útil si nos hemos equivocado y queremos dividir un commit en varios o simplemente no queremos incluir ciertos cambios por ahora.

Si queremos eliminar los cambios tanto del área de staging como del directorio de trabajo, podemos combinar las opciones --staged y --worktree:

git restore --staged --worktree readme.md

Esto es equivalente a ejecutar primero git restore --staged readme.md y luego git restore readme.md, pero en un solo paso. Así, el archivo vuelve completamente a su estado original, como si nunca hubiéramos hecho cambios.

Además, git restore nos permite recuperar versiones específicas de archivos desde otros commits, ramas o tags usando la opción --source. Por ejemplo, para traer el archivo readme.md desde el tag v4.0.0 al directorio de trabajo, haríamos:

git restore --source v4.0.0 readme.md

Esto reemplaza el archivo en nuestro directorio de trabajo con la versión que había en ese tag, pero no lo añade al área de staging, lo que nos da control para revisar los cambios antes de decidir si los incluimos en un commit.

Aunque git checkout sigue estando disponible y no va a desaparecer pronto, git restore nos ofrece una forma más clara y específica para deshacer cambios y manejar el área de staging, con comandos más fáciles de entender y recordar. Para explorar todas las opciones que ofrece, podemos consultar la ayuda con:

git restore -h

y descubrir todos los flags disponibles, como el modo silencioso y otros parámetros útiles.

En definitiva, git restore es una herramienta que nos ayuda a mantener nuestro directorio de trabajo y staging limpios y controlados, simplificando tareas que antes podían resultar confusas con git checkout.

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