Saltar al contenido
GitTree

Lección 26 · Recuperación

Guarde el trabajo y reanúdelo de forma segura

Deja a un lado una edición sin terminar y una nueva nota con el alijo, recupéralas con Aplicar y mira lo que hace Pop cuando entra en conflicto: el alijo permanece hasta que tú decidas.

Progreso guardado en este navegador.

La reproducción carga el vídeo de YouTube (modo de privacidad mejorada).

Narración en inglés · English and Arabic subtítulos

Abre la página del vídeoVer en YouTube

lo que aprenderás

  • Elija lo que se incluye en un alijo: ediciones con seguimiento, archivos sin seguimiento o solo lo que está preparado.
  • Explique por qué Apply conserva el alijo y Pop lo elimina solo después de una aplicación limpia.
  • Verifique que tanto la edición como la nota regresaron y que la rama no se movió.
  • Recuperate de un conflicto Pop sin perder el alijo.

Antes de empezar

Estás en private/stash-hint, una rama del resultado de la lección 18, con una confirmación que agrega docs/stash-conflict.md ("Usar una dirección ficticia"). En su árbol de trabajo tiene una edición sin terminar de ese archivo y un archivo nuevo, docs/signup-hint.md, que Git nunca ha visto. Alguien te pide que cambies a otra cosa, por lo que deseas dejar ambas cosas a un lado, sin comprometer el trabajo a medio hacer.

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.

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.

Stash almacena sus cambios locales como objetos Git y luego limpia el árbol de trabajo hasta la última confirmación. Es una herramienta de interrupción breve, no una copia de seguridad ni un reemplazo de una sucursal que desea conservar.

Un alijo contiene ediciones rastreadas de forma predeterminada. Los archivos sin seguimiento se quedan a menos que los solicites, lo que hace Git con --include-untracked. El cuadro de diálogo Stash Changes… de GitTree tiene Include untracked files activado cuando se abre; compruébalo de todos modos. Los archivos ignorados son una categoría diferente y no se guardan aquí. Only staged changes guarda solo lo que está en el índice y Keep staged changes in place too deja el índice como estaba.

Apply Stash devuelve los cambios y mantiene el alijo en la lista. Pop Stash lo aplica y elimina la entrada solo si la aplicación fue limpia. Si entra en conflicto, el alijo permanece y usted resuelve el conflicto en el árbol de trabajo. Apply y Pop de GitTree no restauran el estado preparado; git stash apply --index hace eso, pero la aplicación no lo usa, por lo que las ediciones preparadas se devuelven sin preparación.

El almacenamiento y la aplicación nunca mueven la rama ni realizan un compromiso. Sólo cambian el árbol de trabajo y una entrada de alijo.

Prepare el estado exacto del proyecto

Comience con una copia normal separada del proyecto tal como lo dejó la lección 18 y deje su gittree-features original intacto. Cree la rama, guarde DOC_STASH_BASE y confírmela. Luego guarde DOC_STASH_WORK sobre el mismo archivo y DOC_HINT como un archivo nuevo, sin realizar ninguna preparación. DOC_STASH_OTHER y STASH_RESOLVED se usan solo en la copia de conflicto separada.

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/stash-conflict.md — DOC_STASH_BASE

Salida
Use a fictional address.

docs/stash-conflict.md — DOC_STASH_WORK

Salida
Use a complete fictional email address.

docs/signup-hint.md — DOC_HINT

Salida
Unfinished signup hint: use fictional data only.

docs/stash-conflict.md — DOC_STASH_OTHER

Salida
Do not send the address anywhere.

docs/stash-conflict.md — STASH_RESOLVED

Salida
Use a complete fictional email address. Nothing is sent.

En GitTree

Abra la paleta con Comando+Mayús+P (Ctrl+Mayús+P en Ubuntu). Las entradas de alijo se enumeran en el panel izquierdo debajo de Stashes; Las acciones de un alijo están en su menú contextual.

  1. Cree la rama y los dos cambios no preparados como se muestra en la siguiente sección. Lea la lista de cambios: docs/stash-conflict.md se modifica y docs/signup-hint.md es nuevo.
  2. Abra la paleta y ejecute Stash Changes…. En el cuadro de diálogo, establezca Message en signup hint rehearsal. Only staged changes está apagado. Include untracked files está activado. Keep staged changes in place too está apagado. Elija Stash.
  3. Espere el aviso "Guardé sus cambios". La lista de cambios está vacía, la nota desapareció del disco y el alijo aparece debajo de Stashes.
  4. Pase el cursor sobre la fila de almacenamiento: su información sobre herramientas dice "Incluye archivos sin seguimiento". Haga clic derecho y elija Show Stash: el gráfico selecciona el alijo y el panel derecho enumera el cambio registrado, docs/stash-conflict.md. La nota sin seguimiento se guarda en una parte separada del alijo.
  5. Vuelva a hacer clic derecho y elija Apply Stash. El aviso dice "Se aplicó el alijo; todavía está en la lista".
  6. Verifique el resultado: docs/stash-conflict.md se modifica nuevamente, docs/signup-hint.md vuelve como un archivo sin seguimiento, la sugerencia de rama es la misma confirmación y el alijo todavía aparece en la lista.
  7. Separate conflict copy. En una segunda copia, después del alijo, confirma DOC_STASH_OTHER en el mismo archivo. Haga clic derecho en el alijo y elija Pop Stash. La advertencia dice "El alijo entra en conflicto con sus cambios: resuelva los conflictos. El alijo se conserva".
  8. El archivo en conflicto aparece con Conflicted. Ábrelo, escribe STASH_RESOLVED en el resultado y elige Save and Mark Resolved. El alijo todavía está ahí. Cuando esté seguro de que el trabajo es seguro, haga clic derecho y elija Delete Stash…; el cuadro de diálogo dice que se elimina de la lista y se mantiene en las instantáneas de recuperación. Deshacer de GitTree aún no restaura un alijo eliminado (lección 30), así que trate la eliminación como definitiva.

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

En una copia separada del resultado de la lección 18:

Command · bash
git switch --create private/stash-hint

Guarde DOC_STASH_BASE como docs/stash-conflict.md y luego:

Command · bash
git add -- docs/stash-conflict.md
git commit --quiet -m "docs: establish the stash conflict baseline"

Guarde DOC_STASH_WORK sobre docs/stash-conflict.md y DOC_HINT como docs/signup-hint.md, sin preparación. Luego guarda ambos:

Command · bash
git stash push --include-untracked --message "signup hint rehearsal"
git status --short
git stash list --format=%s
Salida
On private/stash-hint: signup hint rehearsal

El estado no imprime nada: el árbol está limpio. Guarde una copia intacta de este estado para el conflicto y luego aplique:

Command · bash
git stash apply 'stash@{0}'
git status --short
git stash list --format=%s
git rev-parse HEAD
Salida
 M docs/stash-conflict.md
?? docs/signup-hint.md
On private/stash-hint: signup hint rehearsal

Ambos cuerpos están de regreso, el alijo todavía aparece en la lista y HEAD es la confirmación que era. Sin --include-untracked, el mismo envío deja docs/signup-hint.md en el disco y guarda solo la edición.

En la copia separada, guarde DOC_STASH_OTHER y confírmelo, luego muestre:

Command · bash
git add -- docs/stash-conflict.md
git commit --quiet -m "docs: change the stash target"
git stash pop 'stash@{0}'
git ls-files --unmerged
git stash list --format=%s

Pop sale con 1 e imprime "CONFLICTO (contenido)" y "La entrada oculta se guarda en caso de que la necesite nuevamente". Se enumeran tres entradas no fusionadas, el archivo contiene marcadores de conflicto, docs/signup-hint.md se restaura y el alijo todavía aparece en la lista. No es necesario fusionar ni cambiar la base para continuar: guarde STASH_RESOLVED y ejecute git add -- docs/stash-conflict.md. Para estacionar el trabajo en su propia rama, git stash branch rescue-hint 'stash@{0}' crea la rama en la confirmación donde se creó el alijo, la aplica y elimina el alijo solo entonces.

Resultado

Where you end: en la primera copia, el árbol tiene la edición y la nota nuevamente, HEAD no se ha movido y el alijo todavía aparece en la lista. En la copia del conflicto, Pop informó del conflicto, el alijo sobrevivió y su resolución está preparada. Ningún comando de almacenamiento realizó ninguna confirmación y no se impulsó nada.

Errores comunes

  • Olvidar que los archivos sin seguimiento no se guardan a menos que los incluya.
  • Suponiendo que Pop borrara el alijo después de un conflicto. No fue así.
  • Aplicar dos veces cuando la primera aplicación ya funcionó y luego preguntarse sobre cambios duplicados.
  • Usar un alijo como almacén a largo plazo. Nombra trabajo útil con una rama.

Si algo sale mal

Después de un conflicto Pop, deje el alijo en su lugar, resuelva el archivo y verifique el resultado antes de eliminar nada. Si presentó su solicitud en la sucursal equivocada, descarte ese trabajo solo después de haber confirmado que aún lo tiene en el alijo. Create Branch from Stash… le da al alijo su propia rama en la confirmación donde se realizó.

Comprueba tu comprensión

Responda cada pregunta y luego lea por qué. Las preguntas marcadas como "Obligatorias" cuentan para completar la lección.

  1. Pregunta 1 de 6

    ¿Qué hace Pop Stash que no hace Apply Stash?

    Elija una respuesta.

  2. Pregunta 2 de 6

    Ejecute Stash Changes... con Incluir archivos sin seguimiento activado. ¿Cuáles de estas son ciertas?

    Elija cada respuesta que corresponda.

  3. Pregunta 3 de 6
    Requerido

    Después del alijo, elige Aplicar alijo en él. ¿Qué ves?

    Elija una respuesta.

  4. Pregunta 4 de 6

    Cambie la entrada: en una copia, desactive Incluir archivos sin seguimiento antes de guardarlos. ¿Qué pasa con docs/signup-hint.md?

    Elija una respuesta.

  5. Pregunta 5 de 6
    Requerido

    En la copia del conflicto, Pop Stash advierte: "El alijo entra en conflicto con sus cambios: resuelva los conflictos. El alijo se conserva". Te preocupa que el trabajo se haya acabado. ¿Qué es verdad y qué haces?

    Elija una respuesta.

  6. Pregunta 6 de 6
    Requerido

    Después de Apply Stash en la primera copia, ¿qué lecturas muestran que funcionó como dice la lección?

    Elija cada respuesta que corresponda.

0 de 6 correcto

Responda correctamente las preguntas requeridas para completar la lección.

Comprobado en este navegador.

Practica

Demuestre que el árbol estaba limpio después del alijo, que Apply restauró ambos archivos y que el alijo todavía aparece en la lista. Predice qué diferiría si Include untracked files estuviera desactivado. En la copia del conflicto, demuestra que el alijo sobrevivió al Pop.

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

  • Elija las opciones de alijo a propósito.
  • Aplicar mantiene la entrada.
  • Un pop conflictivo también lo conserva.

Términos del glosario introducidos

Alijo — مخبأ; aplicar — تطبيق; pop — تطبيق وحذف; sin seguimiento — غير متتبَّع.

Transcripción del vídeo

La narración del vídeo, cue a cue.

Mostrar la transcripción
  1. Deja a un lado el trabajo sin terminar y tráelo regresar con seguridad.
  2. Un alijo guarda tus ediciones en un estante y Limpia el árbol de trabajo.
  3. Aplicar devuelve los cambios y los mantiene la entrada. Pop lo retira, si está limpio.
  4. Haga una rama con una confirmación, luego edite el archivo y agregue una nueva nota.
  5. En la lista de cambios: un archivo modificado, y un archivo nuevo.
  6. Anota el compromiso actual. no debe moverse.
  7. Abra la paleta y ejecute Stash Changes.
  8. Dale un mensaje que reconocerás.
  9. Sólo la puesta en escena está apagada. Incluir es sin seguimiento encendido. Mantener en escena está desactivado.
  10. Los archivos ignorados son una categoría diferente, y no entres.
  11. Elija Stash y espere el aviso.
  12. La lista de cambios está vacía y el alijo está listado.
  13. La información sobre herramientas dice que los archivos sin seguimiento son incluido. Show Stash enumera sus archivos.
  14. Haga clic derecho en el alijo y elija Aplicar Alijo.
  15. El aviso dice que el alijo todavía está en el lista.
  16. Ambos están de vuelta: la edición y la nota.
  17. El consejo de la rama es el mismo compromiso. No El comando stash creó uno.
  18. Y el alijo todavía está en el estante.
  19. En la terminal, git stash push con incluir sin seguimiento, luego el estado.
  20. La lista muestra el mensaje, con el nombre de la sucursal primero.
  21. git stash apply trae ambos de vuelta.
  22. El alijo todavía aparece en la lista y HEAD es el lo mismo.
  23. Sin esa opción la nota se queda encendida. disco.
  24. En la copia del conflicto, cometemos otro. cambie primero y luego haga estallar.
  25. La advertencia dice que el alijo se conserva. el el archivo está en conflicto.
  26. Resuelva el archivo y márquelo resuelto. El alijo todavía está ahí.
  27. Elimina el alijo sólo cuando estés seguro. O darle su propia rama.
  28. Práctica: demostrar que está limpio, restaurado y conservado. Luego predice sin incluir sin seguimiento.
  29. A continuación, aprenda qué reinicio suave, mixto y duro cada cambio.