Comandos de Git

git restore

git restore: restaura el directorio de trabajo, el área de staging o ambos.

git restore devuelve archivos a un estado conocido. Por defecto, reemplaza los archivos del directorio de trabajo con lo que hay en el área de staging. Si no hay nada en staging, el resultado coincide con tu último commit.

Con la opción --staged, restablece el área de staging para que coincida con el último commit (o con el commit indicado en --source) y deja tu directorio de trabajo tal cual. Así quitas cambios del área de staging y vuelves al estado del commit sin perder tus ediciones.

Añadido en Git 2.23.0, git restore es la forma específica de descartar cambios locales o quitar archivos del área de staging. Si tienes la costumbre de hacerlo todo con git reset, puedes seguir con ella, pero git restore es más difícil de usar mal y solo toca el directorio de trabajo y el área de staging, no el historial de commits.

Casos de uso

  1. Restaurar el directorio de trabajo (sin nada en staging): Has hecho cambios que no quieres. Devuelve el directorio de trabajo al último commit.

    Solución: git restore --worktree . o simplemente git restore ., porque el modo --worktree es el predeterminado.

  2. Restaurar el área de staging y conservar el directorio de trabajo: Has preparado demasiados cambios. Devuelve el área de staging al último commit y conserva tus ediciones en el directorio de trabajo.

    Solución: git restore --staged .

  3. Restaurar el directorio de trabajo y conservar el área de staging: Has preparado lo correcto y después has añadido más cambios que no te gustan. Devuelve el directorio de trabajo a lo que está en staging.

    Solución: git restore --worktree . o git restore .

  4. Restaurar el área de staging y el directorio de trabajo: Quieres tirarlo todo, tanto lo que está en staging como lo que está fuera de staging. Devuelve ambos al último commit.

    Solución: git restore --worktree --staged .

Ejemplos

Descartar cambios en un archivo concreto:

git restore README.md

Descartar cambios en todos los archivos del directorio actual (la ruta . significa "aquí"):

git restore .

Quitar un archivo del área de staging, pero conservar sus ediciones en el directorio de trabajo:

git restore --staged README.md

Quitarlo todo del área de staging y restablecer el directorio de trabajo al último commit:

git restore --worktree --staged .

Restaurar un archivo desde un commit concreto.

git restore --source a1b2c3d4 README.md

Elegir de forma interactiva qué cambios conservar o descartar:

git restore --patch

O la forma corta:

git restore -p