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

7 minutos de lectura

¿Como encontrar un archivo eliminado en el historial de confirmacion
pedro rolo

É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 existía?

  • Las respuestas aquí son más útiles para mí que las respuestas en el duplicados.

    – Felipe Álvarez

    7 de junio de 2017 a las 2:18


  • de acuerdo… independientemente de los duplicados… no aparecieron en la búsqueda de Google… este sí… espero que dejemos de perder el tiempo persiguiendo duplicados… solo el tiempo y el algoritmo de Google lo harán decir qué pregunta es la mejor.

    – Tim Boland

    15 de septiembre de 2018 a las 23:13

  • ¿Cuál duplica a @FelipeAlvarez? Mirando al horizonte pero no encontré ninguno. Tal vez alguna vez hubo un duplicado.

    – Timo

    3 de marzo a las 21:23

¿Como encontrar un archivo eliminado en el historial de confirmacion
Ámbar

Si no sabe la ruta exacta, puede usar

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

Si conoce la ruta en la que se encontraba el 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 mostrarlo 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 el pago previo al identificado, porque al momento de <SHA> confirmar el archivo se elimina, debemos mirar el compromiso anterior para obtener el contenido del archivo eliminado

  • ¿Qué pasa si no sabes la ruta exacta? ¿Todo lo que sabes es el nombre del archivo?

    – sacerdotec

    16 de noviembre de 2012 a las 4:09

  • @PedroMorteRolo git log -- <path> no tendrá salida cuando esté en una rama en la que el archivo nunca existió. Siempre debes usar git log --all -- <path>, para asegurarse de que no se pierda los cambios que ocurrieron en otras ramas. El comando git log -- <path> puede ser muy peligroso si tienes más de una rama y tiendes a olvidar caminos y ramas (como yo) y también es peligroso si trabajas con otros desarrolladores.

    – placas

    10 de febrero de 2014 a las 18:29

  • @Amber, considere agregar --all (gracias Philip) a tu git log respuesta, para que la gente no se pierda cambios y archivos en otras sucursales. A las personas olvidadizas como yo les ahorraría muchos dolores de cabeza.

    – placas

    10 de febrero de 2014 a las 18:33

  • Como se indica en la respuesta a continuación, la restauración del archivo debe ser git checkout <SHA>^ -- <path-to-file> (tenga en cuenta el símbolo ^), porque en el momento de la confirmación de , el archivo se elimina, debemos mirar la confirmación anterior para obtener el contenido del archivo eliminado

    – kipelovets

    18 de febrero de 2015 a las 12:56

  • Cuando usas **/thefile.* por lo general, es una buena idea citarlo, por ejemplo, '**/thefile.*'para proteger el mundo * de la concha (No estoy familiarizado con las conchas de Windows y cuando comen *s, pero si hay una coincidencia accidental del directorio de trabajo actual en bash, eso podría causar problemas).

    – torek

    06/12/2016 a las 17:40

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 la identificación de confirmación de esa confirmación y copie la identificación de confirmación

git log --all -- FILEPATH

Mostrar diferencias del archivo eliminado

git show COMMIT_ID -- FILE_PATH

Recuerde, puede escribir la salida en un archivo usando > me gusta

git show COMMIT_ID -- FILE_PATH > deleted.diff

  • Aunque encontré el camino con la ayuda del primer paso, el segundo paso arroja este error: unknown revision or path not in the working tree.

    – JacobF

    6 de junio de 2014 a las 13:39

  • Para ver los hashes de confirmación junto con las eliminaciones, puede hacer git log --diff-filter=D --summary | grep -E 'delete|^commit\s+\S+'

    –Chris Middleton

    20 de marzo de 2015 a las 21:38


  • El paso 2 no devuelve nada. ¿Alguna idea de por qué puede suceder? Mi nombre de archivo es correcto.

    – Denis Kniazhev

    24 de julio de 2015 a las 11:07

  • Para encontrar la función de combinar las tres en una, agregue esto en su .bashrc o .zshrc: git-grep-latest(){ result_path=$(git log --diff-filter=D --summary | grep $1 | head -1 | awk '{print $4;}'); latest_commit=$(git log --all -- $result_path | head -1 | awk '{print $2;}'); git show $latest_commit -- $result_path; } y ahora solo puedes hacer: git-grep-latest some_text

    – al azar

    16 de diciembre de 2015 a las 3:58


  • @TylerJones puedes alimentar cualquier cosa con Linux usando tuberías – google linux pipes.. te gustará eso.

    – Juan Caza

    4 oct 2018 a las 12:49

1646962449 546 ¿Como encontrar un archivo eliminado en el historial de confirmacion
Calaf

Suponga que desea recuperar un archivo llamado MyFilepero no están seguros de su ruta (o su extensión, para el caso):

Preliminar: Evite la confusión yendo a la raíz de git

Un proyecto no trivial puede tener varios directorios con nombres de archivo similares o idénticos.

> cd <project-root>
  1. Encuentra la ruta completa

    registro de git –diff-filter=D –summary | eliminar grep | grep Mi archivo

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

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

  1. Determinar todas las confirmaciones que afectaron a 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 la primera confirmación de la lista (la última cronológicamente, aquí bd8374c), no se encontrará el archivo, ya que se eliminó en esa confirmación.

> 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 signo de intercalación):

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

  • Esto es mucho más claro que la respuesta aceptada.

    – pouyan021

    25 de mayo de 2019 a las 7:32

  • para la consola de Windows (cmd), use find en lugar de grep en el paso 2: git log --diff-filter=D --summary | find "delete" | find "MyFile" Y paso 3, tenga en cuenta las comillas alrededor del hash: git checkout "bd8374c^" -- full/path/to/MyFile.js

    – usuario5542121

    10 de enero de 2020 a las 11:06


No se pudo editar la respuesta aceptada, así que agréguela 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

1646962450 604 ¿Como encontrar un archivo eliminado en el historial de confirmacion
Petur Subev

¡@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.*

  • @PedroMorteRolo Hmmm. No sé cómo me siento al copiar una respuesta existente en la más votada:/ Esta respuesta también fue útil por sí sola; ¿un voto a favor podría haber sido suficiente?

    – Clemente

    28 de mayo de 2016 a las 15:18

  • Esto no encuentra el archivo si está en la raíz del proyecto (probado en Cygwin).

    – wortwart

    22 de noviembre de 2017 a las 9:25

A continuación se muestra un comando simple, donde un desarrollador o un usuario de git puede pasar un nombre de archivo eliminado del directorio raíz del repositorio 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 hágalo.

  • @PedroMorteRolo Hmmm. No sé cómo me siento al copiar una respuesta existente en la más votada:/ Esta respuesta también fue útil por sí sola; ¿un voto a favor podría haber sido suficiente?

    – Clemente

    28 de mayo de 2016 a las 15:18

  • Esto no encuentra el archivo si está en la raíz del proyecto (probado en Cygwin).

    – wortwart

    22 de noviembre de 2017 a las 9:25

1646962451 311 ¿Como encontrar un archivo eliminado en el historial de confirmacion
Felipe Oakley

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

  • Que --all La opción es crítica tanto para su respuesta como para la respuesta aceptada.

    – placas

    10/02/2014 a las 18:30

  • Navegar por el historial llevará una cantidad extraordinaria de tiempo para la mayoría de los proyectos.

    – mikemaccana

    23 mayo 2018 a las 19:51

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad