Probar entradas expiradas del reflog
En este paso, aprenderemos cómo Git gestiona el reflog y cómo las entradas pueden expirar eventualmente. Por defecto, Git conserva las entradas del reflog durante un período determinado. Las entradas alcanzables (aquellas a las que apunta una rama o una etiqueta) se conservan durante 90 días, mientras que las entradas inalcanzables (aquellas a las que no apunta nada) se conservan durante 30 días. Después de estos períodos, el proceso de recolección de basura de Git puede eliminarlas.
Si bien no podemos simular el paso del tiempo en este laboratorio para ver cómo las entradas expiran naturalmente, podemos activar manualmente la recolección de basura de Git con una opción específica para eliminar (prune) las entradas antiguas del reflog.
Importante: Ejecutar este comando eliminará las entradas antiguas del reflog en función de los tiempos de expiración configurados. En un escenario del mundo real, normalmente no necesitarías ejecutar esto manualmente a menos que tengas una razón específica para limpiar las entradas antiguas del reflog.
Primero, asegúrate de estar en el directorio my-time-machine
:
cd ~/project/my-time-machine
Ahora, ejecutemos el comando de recolección de basura con la opción de eliminación para las entradas del reflog. Estableceremos un tiempo de expiración muy corto para las entradas inalcanzables para demostrar el efecto.
git gc --prune=now --aggressive
Este comando le dice a Git que ejecute la recolección de basura inmediatamente (--prune=now
) y de manera agresiva (--aggressive
) para limpiar los objetos sueltos y eliminar las entradas inalcanzables del reflog.
Después de ejecutar el comando, volvamos a comprobar el reflog:
git reflog
Es posible que veas que algunas entradas más antiguas, especialmente si has realizado más operaciones antes de este laboratorio, pueden haber desaparecido. En nuestro repositorio simple con solo dos entradas en el reflog, es posible que ambas sigan estando presentes porque son relativamente nuevas y una todavía es alcanzable por HEAD
y master
. Sin embargo, si tuvieras una historia más compleja con confirmaciones inalcanzables, este comando las eliminaría en función de la configuración de expiración.
La principal lección aquí es que el reflog no es permanente para siempre. Git limpia las entradas antiguas para ahorrar espacio. Sin embargo, para los flujos de trabajo de desarrollo típicos, los tiempos de expiración predeterminados suelen ser suficientes para recuperarse de la mayoría de los errores.
Comprender que las entradas del reflog tienen una fecha de expiración te ayuda a valorar la importancia de crear confirmaciones y ramas significativas para preservar puntos importantes en la historia de tu proyecto.