El comando git restore es el comando para descartar o deshacer cambios locales en el directorio de trabajo y sacar archivos del Staging Area.
Durante el desarrollo, a veces vas realizar modificaciones que finalmente no queremos conservar. Estás editando un archivo, empiezas a cambiar cosas, pruebas una idea loca y al final, no te gusta lo que has cambiado.
Ya sea porque estas haciendo pruebas o hayas has metido la pata, necesitamos una forma de revertir un archivo a su estado anterior. Necesitamos un “Ctrl+Z”, pero para Git.
En este artículo veremos cómo utilizar este git restore para descartar cambios en nuestro directorio de trabajo o sacar archivos del Staging Area.
Antiguamente esta tarea se realizaba con git checkout, un comando sobrecargado de funciones que solía generar confusión.
Para solucionar esto, las versiones modernas de Git introdujeron git restore.
Descartar cambios locales
Este es el caso más común. He roto el archivo, quiero volver atrás. No quieres tu versión acutal del fichero, quieres que vuelva a estar idéntico al último commit.
El comando es:
git restore nombre_archivo.ext
También puedes usar . para restaurar todos los archivos modificados de la carpeta actual:
git restore .
Git va a su base de datos (al último commit), busca esa versión del archivo y la copia en tu Working Directory, machacando lo que tuvieras escrito.
¡Cuidado! Esta operación es destructiva. A diferencia de otras cosas en Git, con restore no hay deshacer. Si restauras un archivo que no habías guardado con commit, los cambios que tuvieras escritos en él se pierden para siempre.
Sacar archivos del Staging Area
Este es el otro uso principal de restore. Supongamos el siguiente caso:
- Modificas
app.js(un cambio bueno). - Modificas
claves.txt(un archivo con contraseñas que NO quieres subir). - Por inercia, escribes
git add ..
Ahora tienes claves.txt en el Staging Area. Si haces commit, la lías, porque quedaría grabado en el histórico de Git.
Necesitas sacarlo del Stage, pero sin borrar el archivo de tu disco (porque quieres tu fichero de contraseñas).
git restore --staged claves.txt
Al usar la bandera --staged, le estamos diciendo a Git: “Restaura la versión del archivo que hay en el Stage para que coincida con la del último commit”.
El resultado es que el archivo sale del área de preparación y vuelve a estar simplemente Modified (o Untracked si era nuevo).
Antiguamente esto se hacía con el críptico git reset HEAD claves.txt. Ahora, con restore, es mucho más lógico
