Lección 29 · Recuperación
Encuentra un compromiso perdido con reflog
Encuentre una confirmación que un restablecimiento completo dejó en el registro local, verifique su archivo antes de confiar en él y coloque una rama en él, sin mover su pago actual.
- Nivel: Avanzado
- 8 minutos de lectura
- 5 minutos de vídeo
- Actualizado
- Antes de esta lección: Restablecer: suave, mixto y duro
Progreso guardado en este navegador.
La reproducción carga el vídeo de YouTube (modo de privacidad mejorada).
lo que aprenderás
- Lea el reflog como el registro de este repositorio de dónde han estado HEAD y las ramas.
- Verifique el contenido de la confirmación de un candidato antes de rescatarlo.
- Cree una rama en el compromiso medido sin verificarla.
- Diga lo que el reflog no puede recuperar: trabajo no comprometido y entradas caducadas.
Antes de empezar
Está en private/lost-signup, una rama del resultado M de la lección 18. Comprometió una nota, "docs: mantenga la nota de recuperación de registro", que agregó docs/signup-recovery.md y luego ejecutó un restablecimiento completo de una confirmación. La nota desapareció de la sucursal, del gráfico y de tus archivos. Aún no tienes una rama de rescate y no cambiaste nada más.
Todo es local y en el plan gratuito (GitTree te pide que inicies sesión): sin cuenta de alojamiento, sin proveedor, sin Internet. Toda identidad es ficticia (ejemplo.com). Nunca ejecute esta lección en un proyecto real. El hard reset en la preparación es un ensayo en una copia desechable.
Realice los cambios en GitTree o con los comandos nativos de Git, no ambos en la misma copia. Leer el resultado siempre es seguro. Las etiquetas del menú provienen de las propias cadenas de GitTree 2.0 y los comandos nativos se ejecutaron con Git 2.43 en copias desechables. Los pasos GitTree no se ejecutaron en macOS, Windows o Linux.
Efectos de concepto y estado.
El reflog es un diario local de los movimientos de los árbitros. HEAD tiene uno, al igual que cada rama. Registra "compromiso", "pago", "reinicio" y similares, con el compromiso al que llegó cada uno. Otro clon no tiene tu diario. Una confirmación de que todavía no pueden existir nombres de sucursales, y el reflog es la forma de encontrarlo.
Los selectores como HEAD@{1} cuentan las entradas a partir de ahora, por lo que cambian con cada operación posterior. Lea la acción, la hora, el ID y el expediente de un candidato antes de usarlo. No memorice una compensación como receta.
El reflog encuentra confirmaciones que se guardaron. No puede encontrar una edición que nunca se haya confirmado, como mostró la lección 27. Las entradas caducan: de forma predeterminada, Git mantiene las entradas para las confirmaciones que ninguna rama alcanza durante unos treinta días, y un repositorio puede cambiar eso. No ejecute comandos de limpieza o caducidad mientras se recupera.
Crear una rama en la confirmación agrega una referencia y nada más. La rama actual, el índice y sus archivos permanecen donde están.
Prepare el estado exacto del proyecto
Comience con una copia ordinaria separada del resultado M de la lección 18 y deje el original intacto. Cree la rama, guarde DOC_LOST, confirme y restablezca una confirmación. Esta preparación destructiva es sólo para una copia desechable.
Entradas de archivos completas
Guarde solo en la fase que se menciona a continuación. Estos son cuerpos UTF-8/LF completos con una nueva línea final; Nunca pegues vallas Markdown. Los archivos ejecutables sin cambios heredan la entrada nombrada. Las versiones en variantes separadas no deben sobrescribir el original.
docs/signup-recovery.md — DOC_LOST
# Recovered signup work
Keep a branch name before leaving useful experimental work.En GitTree
Abra la paleta con Comando+Mayús+P (Ctrl+Mayús+P en Ubuntu).
- Construya el ensayo como se muestra en la siguiente sección y observe el tema del compromiso perdido.
- Abra la paleta y ejecute View Reflog…. El cuadro de diálogo "Reflog" se abre con Reflog of configurado en HEAD; las entradas se enumeran más nuevas primero.
- Lea las entradas principales. El más nuevo dice "restablecer" y el de abajo dice "confirmar" con el asunto "docs: mantenga la nota de recuperación del registro". Utilice Show Older Entries si la lista es larga. No asumas que la segunda fila es siempre la correcta.
- Seleccione la entrada de confirmación. El cuadro de diálogo muestra Show in Graph y New branch name. Show in Graph solo puede colocar una confirmación a la que llega una rama, por lo que para esta confirmación perdida cierra el cuadro de diálogo y el gráfico permanece en M: vuelve a abrir el registro para el siguiente paso. Lee el archivo de confirmación después de restaurarlo.
- De nuevo en el cuadro de diálogo, seleccione la misma entrada, escriba
rescue/signupen New branch name y elija Restore as Branch. El aviso dice "Se creó el rescate/registro de rama. Deshacer lo elimina nuevamente". - Verifique el resultado:
rescue/signuppuntos en la confirmación perdida, la rama actual todavía estáprivate/lost-signupen M y sus archivos no han cambiado. Seleccione la confirmación restaurada y abra su archivodocs/signup-recovery.md: es DOC_LOST. - Deje la rama de rescate en su lugar. No ejecute ninguna limpieza para ordenar el gráfico.
Para cada confirmación ordinaria del curso: Summary es el asunto indicado, Description está vacío y las opciones Amend Previous Commit, Skip Hooks, Add Signed-off-by, Different Author, Push After Commit y Allow Empty Commit permanecen desactivadas.
en la terminal
Sólo en una copia limpia y separada del resultado de la lección 18:
git switch --create private/lost-signupGuarde DOC_LOST como docs/signup-recovery.md y luego:
git add -- docs/signup-recovery.md
git commit --quiet -m "docs: keep the signup recovery note"
git reset --hard HEAD~1
git reflog show --format=%gs -2 HEADreset: moving to HEAD~1
commit: docs: keep the signup recovery noteEnumere los candidatos con sus DNI y marque el que crea que está perdido:
git reflog show --format='%H %gs' HEAD
git show "<lost-sha>:docs/signup-recovery.md"Reemplace <lost-sha> con el ID en la línea "commit: docs: mantenga la nota de recuperación del registro". En este ejemplo inmediato, HEAD@{1} es el mismo compromiso, pero ese desplazamiento no es una regla. Cree la rama de rescate sin verificarla:
git branch rescue/signup "<lost-sha>"
git show rescue/signup:docs/signup-recovery.md
git symbolic-ref --short HEAD
git status --shortEl archivo es DOC_LOST, la rama impresa es private/lost-signup y el estado está vacío. Sus archivos no muestran la nota porque HEAD permaneció en M. Ningún comando de caducidad o limpieza forma parte de esto.
Resultado
Where you end: rescue/signup apunta a la confirmación perdida y su archivo es DOC_LOST. La rama actual, el índice y sus archivos están exactamente como estaban después del reinicio y no se envió nada.
Errores comunes
- Usar
HEAD@{1}como receta fija en lugar de leer la entrada. - Restablecer o retirar nuevamente antes de guardar una sucursal, lo que agrega más entradas y oculta la que desea.
- Esperando que el reflog contenga una edición que nunca se confirmó.
- Ejecutar comandos de limpieza mientras busca algo.
Si algo sale mal
Si la confirmación no está en la lista, es posible que esté viendo la referencia incorrecta: cambie Reflog of entre HEAD y la rama, y use Show Older Entries. Si realmente desapareció, expiró o nunca se comprometió. En la aplicación, el aviso después de Restore as Branch dice Deshacer elimina la rama nuevamente.
Comprueba tu comprensión
Responda cada pregunta y luego lea por qué. Las preguntas marcadas como "Obligatorias" cuentan para completar la lección.
0 de 6 correcto
Responda correctamente las preguntas requeridas para completar la lección.
Comprobado en este navegador.
Practica
Informe las dos líneas de reflog más recientes, el ID de la confirmación perdida, la primera línea del archivo recuperado y la rama en la que se encuentra su pago. Luego, diga qué mostraría el reflog para una edición que nunca realizó.
Su propia confirmación: el sitio no puede ver su computadora.
Para completar la lección, responde correctamente a las preguntas requeridas y confirma el ejercicio práctico.
Resumen
- El reflog es un diario local de movimientos de árbitros.
- Verifique el candidato y luego derive de él.
- Encuentra confirmaciones, no ediciones no guardadas.
Relacionado
Términos del glosario introducidos
Reflog — سجل المراجع; rama de rescate—فرع حفظ; selector — محدِّد.
Transcripción del vídeo
La narración del vídeo, cue a cue.
Mostrar la transcripción
- Un compromiso parece desaparecido. Git todavía recuerda donde estaba.
- El reflog es un diario local de donde HEAD y sucursales han sido.
- Aún no se pueden realizar una confirmación sin nombres de sucursales enumerados en él.
- En una copia desechable: escriba una nota y luego reinícielo por completo.
- El gráfico muestra sólo M. La nota es no se ve por ninguna parte.
- No reinicies ni limpies ahora. Mira primero.
- Abra la paleta y ejecute Ver Reflog.
- El cuadro de diálogo se abre en HEAD. El movimiento más nuevo es primero.
- La fila más nueva es el reinicio. Justo debajo de él es el compromiso perdido.
- Si la lista es larga, muestre las entradas más antiguas.
- Puede cambiar entre HEAD y el rama.
- No memorices HEAD a la una. Leer la entrada en cambio.
- Seleccione la entrada de confirmación. Nuevas opciones aparecer.
- Mostrar en gráfico no puede colocarlo: ninguna rama alcanza este compromiso.
- Así que primero restáurelo como una rama, luego lea su archivo.
- Regrese y seleccione la misma entrada.
- Asigne un nombre a la rama con barra diagonal de rescate.
- Restaurarlo como una rama. El aviso dice Deshacer lo elimina nuevamente.
- La rama de rescate está en el compromiso perdido. Todavía estás en M.
- Tus archivos no cambiaron.
- En la terminal, las dos líneas más nuevas son el reinicio y el compromiso.
- Con los ID, elegimos la confirmación por su línea.
- git show con una ruta lee el archivo desde ese compromiso.
- git branch crea la rama de rescate. Nuestro la caja se queda quieta.
- El estado está vacío y el archivo es seguro. en la rama.
- Una edición que nunca se confirmó no está disponible el reflog.
- Las inscripciones caducan. No ejecute la limpieza mientras te recuperas.
- Es local. Otros clones no tienen tu diario.
- Práctica: reportar las líneas, el ID, el primera línea y la sucursal.
- A continuación, Deshacer y Rehacer del propio GitTree.