Recuperar los archivos perdidos

GitBeginner
Practicar Ahora

Introducción

Como desarrollador, es muy probable que te encuentres en situaciones donde archivos importantes se eliminan y se confirman los cambios por error. Este desafío simula dicho escenario, poniendo a prueba tu capacidad para inspeccionar el historial de Git y utilizar herramientas de restauración de estado para recuperar archivos perdidos y devolver tu proyecto a un estado funcional.

Este es un Desafío (Challenge), que a diferencia de una Práctica Guiada, requiere que intentes completar la tarea de forma independiente en lugar de seguir pasos detallados de aprendizaje. Los desafíos suelen tener cierta dificultad. Si te quedas atascado, puedes consultar con Labby o revisar la solución. Los datos históricos muestran que este es un desafío de nivel principiante con una tasa de aprobación del 96%. Ha recibido una tasa de valoraciones positivas del 94% por parte de los alumnos.

Recuperar los archivos perdidos

Antes de comenzar este desafío, se ha inicializado un repositorio Git para ti en el directorio ~/project/important-project. Este repositorio contiene varios commits, incluyendo la creación y la posterior eliminación accidental de dos archivos fundamentales. Esto es lo que necesitas saber:

  • El repositorio se creó con un commit inicial que añade un archivo README.md.
  • Dos archivos cruciales, important_algorithm.py y crucial_data.txt, se añadieron en un commit posterior.
  • Hubo algunos commits más con diversos cambios.
  • En algún momento, important_algorithm.py y crucial_data.txt se eliminaron accidentalmente y esta eliminación fue confirmada (committed).
  • Ha habido al menos un commit más después de la eliminación accidental.

Tu tarea consiste en recuperar los archivos eliminados navegando por el historial del repositorio y, posteriormente, confirmar los archivos recuperados.

Tareas

  1. Investiga el historial del repositorio para encontrar el momento en que se eliminaron important_algorithm.py y crucial_data.txt.
  2. Restaura el repositorio al estado inmediatamente anterior a la eliminación.
  3. Mantén los commits originales y crea un nuevo commit con el mensaje "Recover deleted files".

Requisitos

  • Trabaja dentro del directorio ~/project/important-project.
  • Asegúrate de que important_algorithm.py y crucial_data.txt estén presentes tras la recuperación.
  • Asegúrate de que el mensaje del último commit sea "Recover deleted files" y que se preserve el historial de commits.

Ejemplo

Tras completar con éxito el desafío, al ejecutar ls en el directorio del proyecto deberías ver:

$ ls ~/project/important-project
important_algorithm.py crucial_data.txt README.md

Al ejecutar git status debería mostrarse un directorio de trabajo limpio:

$ git status
On branch master
nothing to commit, working tree clean

Y git log debería mostrar tu nuevo commit en la parte superior:

$ git log --oneline
8876d8b (HEAD -> master) Recover deleted files
9b3525c Update project status
5e6234c Oops, accidentally deleted important files
9de9506 Update algorithm TODO
01c36ae Add crucial data and algorithm
638a98d Initial commit
✨ Revisar Solución y Practicar

Resumen

En este desafío, te has enfrentado a un escenario común en Git: la eliminación accidental de archivos. Has aprendido a:

  1. Inspeccionar el historial completo de tu repositorio, incluyendo las acciones que modificaron el HEAD.
  2. Restaurar tu repositorio a un estado anterior específico, logrando "retroceder en el tiempo" en tu proyecto.
  3. Crear un nuevo commit para guardar el estado restaurado de tu trabajo.

Estas habilidades son invaluables para encontrar commits perdidos, deshacer errores y mantener un historial de proyecto claro. Recuerda que, aunque estas herramientas pueden salvarte de un desastre, siempre es mejor trabajar con precaución y realizar commits frecuentes y bien documentados para evitar llegar a estas situaciones.

Al completar este desafío, has adquirido experiencia práctica con algunas de las herramientas de recuperación más potentes de Git, habilidades que te serán de gran utilidad a lo largo de tu carrera como desarrollador.