¿Hay un comando en Git para ver (ya sea volcado a stdout, o en $PAGER
o $EDITOR
) una versión particular de un archivo en particular?
git checkout <sha1-of-the-commit-you-need>
, después,git checkout HEAD
¿Hay un comando en Git para ver (ya sea volcado a stdout, o en $PAGER
o $EDITOR
) una versión particular de un archivo en particular?
git checkout <sha1-of-the-commit-you-need>
, después,git checkout HEAD
Respuestas:
Puede usar git show
con una ruta desde la raíz del repositorio ( ./
o ../
para una ruta relativa):
$ git show REVISION:path/to/file
Reemplace REVISION
con su revisión real (podría ser un SHA de confirmación de Git, un nombre de etiqueta, un nombre de sucursal, un nombre de confirmación relativo o cualquier otra forma de identificar una confirmación en Git)
Por ejemplo, para ver la versión del archivo <repository-root>/src/main.c
de hace 4 commits, use:
$ git show HEAD~4:src/main.c
Git para Windows requiere barras diagonales incluso en las rutas relativas al directorio actual. Para obtener más información, consulte la página de manual de git-show
.
Hacer esto por fecha se ve así:
git show HEAD@{2013-02-25}:./fileInCurrentDirectory.txt
Tenga en cuenta que HEAD@{2013-02-25}
significa "dónde estaba HEAD el 25/02/2013" en este repositorio (usando el registro ), no "la última confirmación antes del 25/02/2013 en esta rama en la historia".
master
lugar de HEAD@{2013-02-25}
, si estás en una rama
git log --since='2016-04-28 23:59:59 +0100'
?
Si te gustan las GUI, puedes usar gitk:
comenzar gitk con:
gitk /path/to/file
Elija la revisión en la parte superior de la pantalla, por ejemplo, por descripción o fecha. Por defecto, la parte inferior de la pantalla muestra la diferencia para esa revisión (correspondiente al botón de opción "parche").
Para ver el archivo de la revisión seleccionada:
gitk REVISION /path/to/file
. Esto puede ser útil cuando desee verificar una versión determinada, por ejemplo.
También puede especificar un commit hash
(a menudo también llamado commit ID
) con el git show
comando .
git show <commitHash>:/path/to/file
git log /path/to/file
commit hash
como commit 06c98...
(06c98 ... siendo el hash de confirmación)commit hash
git show <commitHash>:/path/to/file
usando el commit hash
paso 3 y el path/to/file
paso 1.Nota: agregar el ./
al especificar una ruta relativa parece importante, es decir git show b2f8be577166577c59b55e11cfff1404baf63a84:./flight-simulation/src/main/components/nav-horiz.html
.
git show <SHA1> --name-only
para obtenerlo.
Además de la respuesta de Jim Hunziker ,
puedes exportar el archivo desde la revisión como,
git show HEAD@{2013-02-25}:./fileInCurrentDirectory.txt > old_fileInCurrentDirectory.txt
Espero que esto ayude :)
Para ver rápidamente las diferencias con las revisiones anteriores de un archivo:
git show -1 filename.txt
> para comparar con la última revisión del archivo
git show -2 filename.txt
> comparar con la 2da última revisión
git show -3 fielname.txt
> para comparar con la última 3ra última revisión
git log -p
le mostrará no solo los registros de confirmación, sino también la diferencia de cada confirmación (excepto las confirmaciones de fusión). Luego puede presionar /
, ingresar el nombre del archivo y presionar enter
. Presione n
o p
para ir a la ocurrencia siguiente / anterior. De esta manera, no solo verá los cambios en el archivo, sino también la información de confirmación.
git log -pm
que también mostraría commits de fusión.
git log -p -- filename.txt
para restringir el historial solo al archivo deseado.
Puede usar un script como este para volcar todas las versiones de un archivo para separar archivos:
p.ej
git_dump_all_versions_of_a_file.sh path/to/somefile.txt
Obtenga el script aquí como respuesta a otra pregunta similar
git_root
, git_log_short
Y git_log_message_for_commit
están desaparecidos.
CAMINO 1: (prefiero de esta manera)
git reflog
git diff-tree --no-commit-id --name-only -r <commitHash>
ejemplo:
git diff-tree --no-commit-id --name-only -r d2f9ba4
// "d2f9ba4" es commit id de "1."
git show <commitHash>:/path/to/file
ejemplo:
git show d2f9ba4:Src/Ext/MoreSwiftUI/ListCustom.swift
// "Src / ..." es la ruta del archivo desde "2".
CAMINO 2:
git reflog
git reset --hard %commit ID%
git reset --hard c14809fa
Ayudante para recuperar múltiples archivos de una revisión dada
Al intentar resolver conflictos de fusión, este ayudante es muy útil:
#!/usr/bin/env python3
import argparse
import os
import subprocess
parser = argparse.ArgumentParser()
parser.add_argument('revision')
parser.add_argument('files', nargs='+')
args = parser.parse_args()
toplevel = subprocess.check_output(['git', 'rev-parse', '--show-toplevel']).rstrip().decode()
for path in args.files:
file_relative = os.path.relpath(os.path.abspath(path), toplevel)
base, ext = os.path.splitext(path)
new_path = base + '.old' + ext
with open(new_path, 'w') as f:
subprocess.call(['git', 'show', '{}:./{}'.format(args.revision, path)], stdout=f)
Uso:
git-show-save other-branch file1.c path/to/file2.cpp
Resultado: lo siguiente contiene las versiones alternativas de los archivos:
file1.old.c
path/to/file2.old.cpp
De esta manera, conserva la extensión del archivo para que su editor no se queje y pueda encontrar fácilmente el archivo antiguo justo al lado del más nuevo.