¿Cómo puedo verificar una versión particular de un archivo en Git?


87

¿Cómo puedo verificar una versión particular de un archivo en git?

Encontré este correo en la lista de correo , que decía:

$ git checkout HEAD~43 Makefile
$ git reset Makefile

Pero no entiendo cómo averiguar 'HEAD ~ 43', si hago una git log aFile, ¿cómo puedo saber qué 'HEAD ~ 43' debo usar?

¿Y por qué necesito ejecutar git resetese archivo? ¿Qué hace?


"git reset <commit> <file>" hace exactamente lo mismo que "git checkout <commit> <file>".
Jakub Narębski

2
Si su pregunta es sobre la sintaxis HEAD ~ 43 (documentada en git-rev-parse), pregunte sobre este problema, no sobre uno no relacionado con el que conozca la respuesta. "¿Qué significa HEAD ~ 45 y cómo encontrar una versión particular del archivo?"
Jakub Narębski

según lt.kernel.org/pub/software/scm/git/docs/v1.6.0.6/… y lt.kernel.org/pub/software/scm/git/docs/v1.6.0.6/git- reset.html , "git reset <commit> <file>" no hace exactamente lo mismo que "git checkout <commit> <file>": "git reset <commit> <file>" revierte <file> en el índice desde <commit> sin tocar <file> en el árbol de trabajo, pero "git checkout <commit> <file>" actualiza el índice para <file> desde <commit> y luego actualiza <file> en el árbol de trabajo.
yoda

2
Si alguna de las respuestas a continuación respondió a su pregunta, la forma en que funciona Stack Overflow, "aceptará" la respuesta haciendo clic en la marca de verificación junto a ella; detalles aquí . Pero solo si su pregunta es respondida; si no es así, considere agregar más detalles a la pregunta y / o comentarios sobre las respuestas diciendo lo que no está claro (todavía).
TJ Crowder

Respuestas:


104

¿Sabes a qué confirmación (es decir, la revisión específica) pertenece el archivo? Entonces hazlo:

git checkout <commit> <file>

El otro comando:

git checkout HEAD~N <file>

Es para cuando quieres obtener una versión del archivo de un rango atrás (lo que hago por nostalgia).


19

HEAD~43es simplemente arbóreo, por lo que puede usar un hash o una etiqueta. Debe separar treeish del nombre de archivo con --, de lo contrario, se trata como nombre de archivo. Por ejemplo.

git checkout v0.45 -- filename
git checkout HEAD^ -- filename
git checkout 16bb1a4eeaa9 -- filename

2

HEAD~43se refiere a la confirmación (versión) del archivo. En lugar de eso, puede usar el hash de confirmación que obtiene al hacer git logen el archivo. Si solo desea el archivo, no necesita ejecutarlo git reset; eso solo es necesario si desea transferir el archivo al HEAD actual.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.