Si un archivo desapareció de su proyecto de Mac antes de confirmarlo en Git, revise primero la Papelera de la Mac y cualquier copia de seguridad de Time Machine o de la nube. Luego revise Git: puede restaurar un archivo eliminado si la versión está en el índice o en un commit, y puede revelar contenido guardado como un objeto inaccesible. Si el archivo solo existía como contenido de copia de trabajo no guardado o sin preparar (unstaged), es posible que Git no tenga ninguna copia. Realice estas comprobaciones antes de crear nuevos archivos en el proyecto.

1. Revisar la Papelera y buscar en la Mac

Abra la Papelera desde el Dock y busque el archivo por su nombre. Si lo encuentra, haga Control-clic en él y seleccione Sacar de la papelera para devolverlo a su ubicación original, o arrástrelo a un lugar seguro. Apple también recomienda buscar con Spotlight si es posible que el archivo se haya movido o renombrado. En el caso de una carpeta de proyecto en iCloud Drive, revise también la Papelera y las opciones de Eliminados recientemente o Recuperación de datos de iCloud; Apple indica que los archivos elegibles eliminados de iCloud Drive generalmente se pueden recuperar en un plazo de 30 días. Instrucciones de recuperación de iCloud de Apple

Si una herramienta de desarrollo eliminó el archivo directamente, o si se ha vaciado la Papelera, continúe con el siguiente paso. No asuma que todas las eliminaciones pasan por la Papelera.

2. Buscar en Time Machine, incluidas las instantáneas locales

Si Time Machine estaba habilitado, conecte el disco de copia de seguridad si está disponible. En el Finder, abra la carpeta que solía contener el archivo, use Spotlight para abrir Time Machine, luego navegue por la línea de tiempo o las flechas de copia de seguridad hasta una fecha anterior a la eliminación. Seleccione el archivo y haga clic en Restaurar. Apple indica que los elementos restaurados regresan a su ubicación original, por lo que considere restaurarlo en una ubicación independiente si desea comparar versiones antes de reemplazar nada. Guía de Apple para restaurar elementos de Time Machine

Un disco de copia de seguridad desconectado no descarta necesariamente la recuperación. Time Machine puede usar instantáneas locales almacenadas en la Mac, pero estas son temporales: Apple señala que las instantáneas generalmente se guardan cada hora y se conservan durante 24 horas, con instantáneas adicionales sujetas al espacio disponible. Solo existen cuando Time Machine está en uso y no sustituyen a una copia de seguridad externa. Acerca de las instantáneas locales de Time Machine

3. Restaurar un archivo rastreado desde Git

Abra Terminal, diríjase al directorio del proyecto y verifique el estado del archivo antes de restaurar nada:

git status --short

Si aparece la ruta eliminada y el archivo estaba rastreado, restáurelo desde el índice indicando su ruta relativa al proyecto:

git restore -- path/to/file.ext

Esto copia la versión del índice en el árbol de trabajo. Si el índice no contenía el archivo, pero este existe en el último commit, restáurelo desde HEAD:

git restore --source=HEAD -- path/to/file.ext

La distinción es importante: git restore utiliza por defecto el índice para una restauración del árbol de trabajo; --source=HEAD selecciona explícitamente el último commit. Una restauración sobrescribe la ruta del árbol de trabajo especificada con la versión seleccionada, por lo que primero copie en otro lugar cualquier archivo presente cuyo contenido sea importante. Git documenta estas fuentes de restauración y su comportamiento en su manual de git restore.

Estos comandos no pueden recuperar un archivo nuevo no rastreado (untracked) ni modificaciones que nunca se prepararon en el área de preparación (stage) o se confirmaron. Git solo conoce las versiones que llegaron a su índice, a sus commits o a su base de datos de objetos.

4. Buscar objetos inaccesibles de Git como último recurso

A veces Git ha almacenado el contenido de un archivo aunque ninguna rama o commit apunte a él; por ejemplo, una versión que se preparó (staged) y luego se eliminó del índice. Desde el directorio del proyecto, inspeccione los objetos inaccesibles:

git fsck --unreachable

Git puede reportar un blob inaccesible seguido de un ID de objeto. Para inspeccionar un candidato sin alterar el proyecto, use:

git cat-file -p OBJECT_ID

Reemplace OBJECT_ID por el ID reportado. Si la salida corresponde al archivo faltante, rediríjala a una copia de recuperación fuera del proyecto, por ejemplo:

git cat-file -p OBJECT_ID > "$HOME/Desktop/recovered-file.txt"

El nombre de archivo y la extensión aquí son ejemplos; elija un destino y un nombre adecuados para el archivo. Los blobs de Git almacenan contenido, no la ruta original, por lo que es posible que deba inspeccionar los candidatos e identificar el nombre correcto usted mismo. git fsck reporta objetos inaccesibles, y su opción --lost-found puede escribir el contenido del blob en .git/lost-found/other/; ninguno de los dos métodos garantiza una versión recuperable. Documentación de git fsck de Git

Cuándo ninguna fuente de recuperación tiene el archivo

Si la Papelera, las copias de seguridad, la recuperación en la nube, el índice de Git, los commits y los objetos inaccesibles de Git no lo contienen, es posible que no haya ninguna copia disponible a través de estas herramientas documentadas. En particular, un archivo no rastreado que nunca se preparó en el área de preparación (stage) queda fuera del historial guardado de Git. Revise el historial local propio de su editor u otro servicio de copia de seguridad si utilizó alguno; la disponibilidad y los pasos de recuperación dependerán de ese producto. Conserve el proyecto tal como está mientras investiga y guarde cualquier contenido recuperado con un nombre nuevo hasta que confirme que es la versión que necesita.

Fuentes