¿Cómo revierte un archivo git a su versión del área de ensayo?

80

Digamos que tengo un archivo llamado a.txt. Lo agrego al área de preparación y luego lo modifico. ¿Cómo podría devolverlo a la forma en que estaba cuando lo agregué?

Geo
fuente

Respuestas:

77
  • Antes de Git 2.23: git checkout a.txt
  • A partir de Git 2.23: git restore a.txt

Git te dice esto si escribes git status.

Antes de Git 2.23:

# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
# modified:   a
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified:   a
#

A partir de Git 2.23:

On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   a

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   a
abyx
fuente
3
@Daenyth Lo verifiqué antes de publicar, y puede ver que el resultado muestra diferentes formas de restablecer los archivos en diferentes estados (en etapas o sin etapas)
abyx
1
@Daenyth: está pensando en 'git checkout branch-name path' o 'git checkout HEAD path'
William Pursell
@William: ¡Gracias! Tiene mucho más sentido ahora.
Daenyth
No funciona para archivos nuevos, por lo que realmente no se extrae de la preparación, ya que requiere un objeto. ¿Cómo realizo el pago desde la puesta en escena? editar Funcionó con el --estado como dice.
Rudie
30

git checkout -- a.txt

La otra respuesta en esta página no tiene el --, y resultó en cierta confusión.

Esto es lo que te dice Git cuando escribes git status:

# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
# modified:   a
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified:   a
#
no rectangular
fuente
4
Habría sido mejor decirnos la diferencia, en lugar de publicar lo que se ha citado antes.
Bachsau
2

Desarmado de un archivo por etapas

Las siguientes dos secciones demuestran cómo trabajar con su área de preparación y cambios en el directorio de trabajo. Lo bueno es que el comando que usa para determinar el estado de esas dos áreas también le recuerda cómo deshacer los cambios en ellas. Por ejemplo, supongamos que ha cambiado dos archivos y desea confirmarlos como dos cambios separados, pero accidentalmente escribe git add * y los coloca en ambos. ¿Cómo puedes desmontar uno de los dos? El comando git status te recuerda:

$ git add *
$ git status

On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)

renamed:    README.md -> README
modified:   CONTRIBUTING.md

Justo debajo del texto "Cambios a confirmar", dice use git reset HEAD ... para quitar el escenario. Entonces, usemos ese consejo para quitar la etapa del archivo CONTRIBUTING.md:

$ git reset HEAD CONTRIBUTING.md
Unstaged changes after reset:
M   CONTRIBUTING.md

$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)

renamed:    README.md -> README

Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)

modified:   CONTRIBUTING.md

El comando es un poco extraño, pero funciona. El archivo CONTRIBUTING.md se modifica pero una vez más se quita la etapa.

Girish Rathi
fuente