ver tipos tag pendientes oneline modificados log etiquetas crear commits archivos git

tipos - Git: ¿Cómo encontrar un archivo eliminado en el historial de confirmación del proyecto?



git ver commits pendientes (7)

@Amber dio la respuesta correcta! Solo una adición más, si no conoce la ruta exacta del archivo, ¡puede usar comodines! Esto funcionó para mí.

git log --all -- **/thefile.*

Érase una vez, había un archivo en mi proyecto que ahora me gustaría poder obtener.

El problema es: no tengo idea de cuándo lo eliminé y en qué ruta estaba.

¿Cómo puedo localizar las confirmaciones de este archivo cuando existió?


Intente usar uno de los visores, como gitk para que pueda navegar por el historial y encontrar ese medio recordado. (use gitk --all si es necesario para todas las sucursales)


No se pudo editar la respuesta aceptada, así que agrégala como respuesta aquí.

para restaurar el archivo en git, use lo siguiente (observe el signo ''^'' justo después de SHA)

git checkout <SHA>^ -- /path/to/file


Obtenga una lista de los archivos eliminados y copie la ruta completa del archivo eliminado

git log --diff-filter=D --summary | grep delete

Ejecute el siguiente comando para encontrar el ID de confirmación de ese compromiso y copie el ID de confirmación

git log --all -- FILEPATH

Mostrar diff del archivo eliminado

git show COMMIT_ID -- FILE_PATH

Recuerde, puede escribir salida en un archivo usando > como

git show COMMIT_ID -- FILE_PATH > deleted.diff


Si no conoce la ruta exacta que puede utilizar

git log --all --full-history -- **/thefile.*

Si conoce la ruta de acceso del archivo, puede hacer esto:

git log --all --full-history -- <path-to-file>

Esto debería mostrar una lista de confirmaciones en todas las ramas que tocaron ese archivo. Luego, puede encontrar la versión del archivo que desea y mostrarla con ...

git show <SHA> -- <path-to-file>

O restaurarlo en su copia de trabajo con:

git checkout <SHA>^ -- <path-to-file>

Tenga en cuenta el símbolo de intercalación ( ^ ), que obtiene la comprobación antes de la identificada, porque en el momento de confirmar el archivo <SHA> , debemos ver la confirmación anterior para obtener el contenido del archivo eliminado.


Supongamos que desea recuperar un archivo llamado MyFile , pero no está seguro de su ruta (o su extensión, en MyFile ):

Prelim: evitar la confusión al pisar la raíz git

Un proyecto no trivial puede tener múltiples directorios con nombres similares o idénticos.

> cd <project-root>

  1. Encuentra el camino completo

    git log --diff-filter = D --summary | grep eliminar | grep MyFile

    delete mode 100644 full/path/to/MyFile.js

full/path/to/MyFile.js es la ruta y el archivo que está buscando.

  1. Determine todas las confirmaciones que afectaron ese archivo

    git log --oneline --follow - full / path / to / MyFile.js

    bd8374c Some helpful commit message

    ba8d20e Another prior commit message affecting that file

    cfea812 The first message for a commit in which that file appeared.

  2. Revisa el archivo

Si elige el primer compromiso listado (el último cronológicamente, aquí bd8374c), el archivo no se encontrará, ya que se eliminó en ese compromiso.

> git checkout bd8374c -- full/path/to/MyFile.js `error: pathspec ''full/path/to/MyFile.js'' did not match any file(s) known to git.`

Simplemente seleccione la confirmación anterior (agregue un caret):

> git checkout bd8374c^ -- full/path/to/MyFile.js


Una de las cosas que resulta tediosa aquí es obtener la ruta del archivo eliminado, así que simplemente escribí un comando simple, donde un desarrollador o un usuario git puede pasar un nombre de archivo eliminado y obtener el historial

git log --diff-filter=D --summary | grep filename | awk ''{print $4; exit}'' | xargs git log --all --

Si alguien, puede mejorar el comando, por favor hazlo.