ver restaurar modificados example deshacer comandos cambios archivos git single-file

modificados - git restaurar commit



Cómo recuperar un solo archivo de una revisión específica en Git (8)

Tengo un repositorio Git y me gustaría ver cómo se veía un archivo hace unos meses. Encontré la revisión en esa fecha, y es 27cf8e84bb88e24ae4b4b3df2b77aab91a3735d8 . Necesito ver qué aspecto tenía un archivo y también guardarlo en un archivo.

gitk ver el archivo usando gitk , pero no tiene una opción para guardarlo. Probé con herramientas de línea de comandos, lo más cerca que pude obtener fue:

git-show 27cf8e84bb88e24ae4b4b3df2b77aab91a3735d8 my_file.txt

Sin embargo, este comando muestra un diff y no el contenido del archivo. Sé que luego puedo usar algo como PAGER=cat y redirigir la salida a un archivo, pero no sé cómo llegar al contenido del archivo real.

Básicamente, estoy buscando algo como svn cat .


Debe proporcionar la ruta completa al archivo:

git show 27cf8e84bb88e24ae4b4b3df2b77aab91a3735d8:full/repo/path/to/my_file.txt


En Windows, con Git Bash:

  • en su área de trabajo, cambie dir a la carpeta donde vive su archivo
  • git show cab485c83b53d56846eb883babaaf4dff2f2cc46:./your_file.ext > old.ext

Esto le ayudará a obtener todos los archivos eliminados entre confirmaciones sin especificar la ruta, útil si hay muchos archivos eliminados.

git diff --name-only --diff-filter=D $commit~1 $commit | xargs git checkout $commit~1


La forma más fácil es escribir:

git show HASH:file/path/name.ext > some_new_name.ext

dónde:

  • HASH es el número de hash SHA-1 de revisión de Git
  • file / path / name.ext es el nombre del archivo que está buscando
  • some_new_name.ext es la ruta y el nombre donde se debe guardar el archivo antiguo

Ejemplo

git show 27cf8e84bb88e24ae4b4b3df2b77aab91a3735d8:my_file.txt > my_file.txt.OLD

Esto guardará my_file.txt de la revisión 27cf8e como un nuevo archivo con el nombre my_file.txt.OLD

Fue probado con Git 2.4.5.

Si desea recuperar un archivo eliminado , puede usar HASH~1 (una confirmación antes de HASH especificado).

EJEMPLO:

git show 27cf8e84bb88e24ae4b4b3df2b77aab91a3735d8~1:deleted_file.txt > deleted_file.txt


Obtenga el archivo de una confirmación anterior mediante la verificación de la confirmación anterior y la copia del archivo.

  • Observe en qué rama está: rama git
  • Compruebe el compromiso anterior que desea: git checkout 27cf8e84bb88e24ae4b4b3df2b77aab91a3735d8
  • Copia el archivo que deseas en una ubicación temporal.
  • Verifique la rama desde la que comenzó: git checkout theBranchYouNoted
  • Copia en el archivo que colocaste en una ubicación temporal.
  • Confirme su cambio en git: git commit -m "added file ?? from previous commit"

Para completar tu propia respuesta, la sintaxis es de hecho

git show object git show $REV:$FILE git show somebranch:from/the/root/myfile.txt git show HEAD^^^:test/test.py

El comando toma el estilo habitual de revisión, lo que significa que puede utilizar cualquiera de los siguientes:

  1. nombre de la rama (como lo suggested ash )
  2. HEAD + x numero de caracteres
  3. El hash SHA1 de una revisión dada
  4. Los primeros (quizás 5) caracteres de un hash SHA1 dado

Consejo Es importante recordar que cuando use " git show ", siempre especifique una ruta desde la raíz del repositorio , no su posición actual en el directorio.

(Aunque Mike Morearty menciona que, al menos con git 1.7.5.4, puede especificar una ruta relativa al poner " ./ " al comienzo de la ruta, por ejemplo:

git show HEAD^^:./test.py

)

Antes de git1.5.x, eso se hizo con algunas tuberías:

git ls-tree <rev>
mostrar una lista de uno o más objetos ''blob'' dentro de un commit

git cat-file blob <file-SHA1>
cat un archivo como se ha confirmado dentro de una revisión específica (similar a svn cat). usa git ls-tree para recuperar el valor de un archivo-sha1 dado

git cat-file -p $(git-ls-tree $REV $file | cut -d " " -f 3 | cut -f 1)::

git-ls-tree muestra el ID de objeto para $ file en la revisión $ REV, esto se recorta de la salida y se usa como un argumento para git-cat-file, que en realidad debería llamarse git-cat-object, y simplemente se vuelca ese objeto al stdout.

Nota: desde Git 2.11 (Q4 2016), puede aplicar un filtro de contenido a la salida del git cat-file .

Consulte commit 3214594 , commit 7bcf341 (09 de septiembre de 2016), commit 7bcf341 (09 de septiembre de 2016) y commit b9e62f6 , commit 16dcc29 (24 de agosto de 2016) por Johannes Schindelin ( dscho ) .
(Fusionada por Junio ​​C Hamano - gitster - in commit 7889ed2 , 21 de septiembre de 2016)

cat-file : soporte --textconv / --filters en modo batch

Aunque " git hash-objects ", que es una herramienta para tomar un flujo de datos en el sistema de archivos y colocarlo en el almacén de objetos de Git, permitió realizar las conversiones de "mundo exterior a Git" (p. Ej., Final de conversiones de línea y aplicación del filtro limpio), y tenía la función activada de forma predeterminada desde muy temprano, su operación inversa " git cat-file ", que toma un objeto del almacén de objetos de Git y se externaliza para el consumo por parte de mundo exterior, carecía de un mecanismo equivalente para ejecutar el "Git-to-outside-world"

git config diff.txt.textconv "tr A-Za-z N-ZA-Mn-za-m <" git cat-file --textconv --batch

Nota: " git cat-file --textconv " comenzó a segfaulting recientemente (2017), que se corrigió en Git 2.15 (Q4 2017)

Ver commit cc0ea7c (21 de septiembre de 2017) por Jeff King ( peff ) .
(Combinado por Junio ​​C Hamano - gitster - in commit bfbc2fc , 28 de septiembre de 2017)


Si desea reemplazar / sobrescribir el contenido de un archivo en su rama actual con el contenido del archivo de una confirmación anterior o una rama diferente, puede hacerlo con estos comandos:

git checkout 08618129e66127921fbfcbc205a06153c92622fe path/to/file.txt

o

git checkout mybranchname path/to/file.txt

A continuación, deberá confirmar esos cambios para que sean efectivos en la rama actual.


Y para volcarlo bien en un archivo (al menos en Windows) - Git Bash:

$ echo "`git show 60d8bdfc:src/services/LocationMonitor.java`" >> LM_60d8bdfc.java

Las " citas son necesarias por lo que conserva nuevas líneas.