He realizado algunos cambios en un archivo que ha sido confirmado varias veces como parte de un grupo de archivos, pero ahora quiero restablecer/revertir los cambios en él a una versión anterior.
He hecho un git log
junto con un git diff
para encontrar la revisión que necesito, pero no tengo ni idea de cómo devolver el archivo a su estado anterior.
git checkout -- foo
Eso restablecerá foo
a HEAD. También puedes:
git checkout HEAD^ foo
para una revisión atrás, etc.
Curiosamente, git checkout foo
no funcionará si la copia de trabajo está en un directorio llamado foo
; sin embargo, tanto git checkout HEAD foo
como git checkout ./foo
sí lo harán:
$ pwd
/Users/aaron/Documents/work/foo
$ git checkout foo
D foo
Already on "foo"
$ git checkout ./foo
$ git checkout HEAD foo
Ten en cuenta, sin embargo, que git checkout ./foo
y git checkout HEAD ./foo
no son exactamente lo mismo; un ejemplo:
$ echo A > foo
$ git add foo
$ git commit -m 'A' foo
Created commit a1f085f: A
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 foo
$ echo B >> foo
$ git add foo
$ echo C >> foo
$ cat foo
A
B
C
$ git checkout ./foo
$ cat foo
A
B
$ git checkout HEAD ./foo
$ cat foo
A
(El segundo add
pone en escena el archivo en el índice, pero no se
no se confirma).
Git checkout ./foo
significa revertir la ruta ./foo
del índice;
añadir HEAD
indica a Git que revierta esa ruta en el índice a su
revisión HEAD
antes de hacerlo.