Saltar al contenido
GitTree

Lección 24 · Recuperación

Continuar, omitir o cancelar una operación activa

Cuando se detiene una fusión o una rebase, tiene tres salidas: continuar, omitir o cancelar. Aprenda cuál encaja, qué desecha cada uno y cómo consultar el repositorio después.

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

  • Indique qué operación está activa antes de tocar cualquier cosa.
  • Continúe solo después de que cada conflicto haya sido resuelto y marcado.
  • Explique qué omite Skip y cuándo se trata de la herramienta equivocada.
  • Cancele una operación y compruebe que ha vuelto al inicio.

Antes de empezar

Utilice la divergencia de la lección 23: conflict/sara (el título de Sara "Revisar los cambios con confianza") y conflict/omar (el título de Omar "Comprende cada cambio guardado"), ambos de la confirmación M. Haga tres copias limpias, llamadas gittree-continue, gittree-abort y gittree-skip. En cada uno, conflict/sara está desprotegido y no se está ejecutando nada. Detendrás la misma operación en los tres y saldrás de cada uno de forma diferente.

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.

Una operación detenida es un estado en sí mismo. Hasta que finalice, el repositorio recuerda lo que estaba haciendo y no debe iniciar otra fusión o rebase encima de él. Primero averigüe qué está activo. El banner de GitTree lo dice claramente: "Fusionando... en...", o "Rebasando... en..." (con el número de paso cuando hay varios), y el número de conflictos restantes. En una terminal, git status comienza con "Tienes rutas no fusionadas" y una sugerencia para una fusión, o "rebase interactiva en progreso; en..." para una rebase, y luego enumera los comandos que puedes usar.

Continue continúa una vez que se resuelve cada conflicto y se prepara su resultado. No es un reintento de la fusión o rebase original: finaliza la confirmación de fusión o mueve una rebase a su siguiente confirmación.

Skip existe para operaciones que reproducen confirmaciones, como una rebase. Deja el cambio de la confirmación actual fuera del resultado por completo. En esta lección, Skip deja caer el encabezado de Sara y la rama termina en el compromiso de Omar. No es una forma de "aceptar el archivo" o de posponer un conflicto, y es la herramienta equivocada cuando todavía se desea ese cambio. Una fusión no tiene Saltar, porque una fusión es un paso: o la finalizas o la abortas.

Abort vuelve al lugar donde comenzó la operación. Todo lo que hayas resuelto hasta ahora se descarta. GitTree guarda una instantánea de recuperación de lo que elimina primero y el repositorio vuelve a la confirmación, el índice y los archivos exactos que tenía antes. Es la salida cuando no estás seguro de lo que estás haciendo.

ElecciónEl resultadolo que cuesta
ContinuarConfirmación de fusión realizada o repetición de la siguiente confirmaciónNada, una vez que todo esté resuelto.
SaltarEl cambio del compromiso actual queda fuera.ese cambio, hasta que lo encuentres de nuevo
AbortarEl repositorio ha vuelto al inicio.el trabajo realizado durante la operación

Prepare el estado exacto del proyecto

Construye las ramas de Sara y Omar una vez y luego haz tres copias. Comience con una copia normal separada del proyecto tal como lo dejó la lección 18 y deje su gittree-features original intacto. Las versiones de la página: FUSIONADA es la base compartida, SARA y OMAR son las versiones competidoras y RESUELTA es el resultado que guarda en la copia continua.

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.

index.html — FUSIONADO

Extracto del archivo · html
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>GitTree Features — course demo</title>
  <link rel="stylesheet" href="styles.css">
</head>
<body>
  <header class="site-header">
    <a href="#main">GitTree Features</a>
  </header>
  <main id="main" tabindex="-1">
    <section class="hero" aria-labelledby="hero-title">
      <p class="eyebrow">GitTree Learn demo project</p>
      <h1 id="hero-title">See your work clearly.</h1>
      <p id="hero-copy">Choose one change, then check what Git saved.</p>
    </section>
    <section class="features" aria-labelledby="features-title">
      <h2 id="features-title">Follow your work</h2>
      <div class="cards">
        <article class="feature-card">
          <h3>History</h3>
          <p>Read commits and branches together.</p>
        </article>
        <article class="feature-card">
          <h3>Changes</h3>
          <p>Review the exact content selected for a commit.</p>
        </article>
        <article class="feature-card">
          <h3>Recovery</h3>
          <p>Inspect the scope of a recovery point before using it.</p>
        </article>
      </div>
    </section>
    <section aria-labelledby="plans-title">
      <h2 id="plans-title">Choose the workflow you need</h2>
      <div class="cards">
        <article class="feature-card">
          <h3>Local Git</h3>
          <p>Local Git workflows work without signing in.</p>
        </article>
        <article class="feature-card">
          <h3>Connected workflows</h3>
          <p>Provider integrations and Nour require Pro or an applicable trial.</p>
        </article>
      </div>
    </section>
  </main>
  <footer><p>Built by a fictional team for GitTree Learn. Review one change at a time.</p></footer>
  <script type="module" src="site.js"></script>
</body>
</html>

index.html — SARA

Extracto del archivo · html
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>GitTree Features — course demo</title>
  <link rel="stylesheet" href="styles.css">
</head>
<body>
  <header class="site-header">
    <a href="#main">GitTree Features</a>
  </header>
  <main id="main" tabindex="-1">
    <section class="hero" aria-labelledby="hero-title">
      <p class="eyebrow">GitTree Learn demo project</p>
      <h1 id="hero-title">Review changes with confidence.</h1>
      <p id="hero-copy">Choose one change, then check what Git saved.</p>
    </section>
    <section class="features" aria-labelledby="features-title">
      <h2 id="features-title">Follow your work</h2>
      <div class="cards">
        <article class="feature-card">
          <h3>History</h3>
          <p>Read commits and branches together.</p>
        </article>
        <article class="feature-card">
          <h3>Changes</h3>
          <p>Review the exact content selected for a commit.</p>
        </article>
        <article class="feature-card">
          <h3>Recovery</h3>
          <p>Inspect the scope of a recovery point before using it.</p>
        </article>
      </div>
    </section>
    <section aria-labelledby="plans-title">
      <h2 id="plans-title">Choose the workflow you need</h2>
      <div class="cards">
        <article class="feature-card">
          <h3>Local Git</h3>
          <p>Local Git workflows work without signing in.</p>
        </article>
        <article class="feature-card">
          <h3>Connected workflows</h3>
          <p>Provider integrations and Nour require Pro or an applicable trial.</p>
        </article>
      </div>
    </section>
  </main>
  <footer><p>Built by a fictional team for GitTree Learn. Review one change at a time.</p></footer>
  <script type="module" src="site.js"></script>
</body>
</html>

index.html — OMAR

Extracto del archivo · html
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>GitTree Features — course demo</title>
  <link rel="stylesheet" href="styles.css">
</head>
<body>
  <header class="site-header">
    <a href="#main">GitTree Features</a>
  </header>
  <main id="main" tabindex="-1">
    <section class="hero" aria-labelledby="hero-title">
      <p class="eyebrow">GitTree Learn demo project</p>
      <h1 id="hero-title">Understand each saved change.</h1>
      <p id="hero-copy">Choose one change, then check what Git saved.</p>
    </section>
    <section class="features" aria-labelledby="features-title">
      <h2 id="features-title">Follow your work</h2>
      <div class="cards">
        <article class="feature-card">
          <h3>History</h3>
          <p>Read commits and branches together.</p>
        </article>
        <article class="feature-card">
          <h3>Changes</h3>
          <p>Review the exact content selected for a commit.</p>
        </article>
        <article class="feature-card">
          <h3>Recovery</h3>
          <p>Inspect the scope of a recovery point before using it.</p>
        </article>
      </div>
    </section>
    <section aria-labelledby="plans-title">
      <h2 id="plans-title">Choose the workflow you need</h2>
      <div class="cards">
        <article class="feature-card">
          <h3>Local Git</h3>
          <p>Local Git workflows work without signing in.</p>
        </article>
        <article class="feature-card">
          <h3>Connected workflows</h3>
          <p>Provider integrations and Nour require Pro or an applicable trial.</p>
        </article>
      </div>
    </section>
  </main>
  <footer><p>Built by a fictional team for GitTree Learn. Review one change at a time.</p></footer>
  <script type="module" src="site.js"></script>
</body>
</html>

index.html — RESUELTO

Extracto del archivo · html
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>GitTree Features — course demo</title>
  <link rel="stylesheet" href="styles.css">
</head>
<body>
  <header class="site-header">
    <a href="#main">GitTree Features</a>
  </header>
  <main id="main" tabindex="-1">
    <section class="hero" aria-labelledby="hero-title">
      <p class="eyebrow">GitTree Learn demo project</p>
      <h1 id="hero-title">Review each change with confidence.</h1>
      <p id="hero-copy">Choose one change, then check what Git saved.</p>
    </section>
    <section class="features" aria-labelledby="features-title">
      <h2 id="features-title">Follow your work</h2>
      <div class="cards">
        <article class="feature-card">
          <h3>History</h3>
          <p>Read commits and branches together.</p>
        </article>
        <article class="feature-card">
          <h3>Changes</h3>
          <p>Review the exact content selected for a commit.</p>
        </article>
        <article class="feature-card">
          <h3>Recovery</h3>
          <p>Inspect the scope of a recovery point before using it.</p>
        </article>
      </div>
    </section>
    <section aria-labelledby="plans-title">
      <h2 id="plans-title">Choose the workflow you need</h2>
      <div class="cards">
        <article class="feature-card">
          <h3>Local Git</h3>
          <p>Local Git workflows work without signing in.</p>
        </article>
        <article class="feature-card">
          <h3>Connected workflows</h3>
          <p>Provider integrations and Nour require Pro or an applicable trial.</p>
        </article>
      </div>
    </section>
  </main>
  <footer><p>Built by a fictional team for GitTree Learn. Review one change at a time.</p></footer>
  <script type="module" src="site.js"></script>
</body>
</html>

En GitTree

Abra la paleta con Comando+Mayús+P (Ctrl+Mayús+P en Ubuntu). Las acciones en una rama con nombre utilizan el menú contextual de esa rama.

  1. Construya las tres copias como se muestra en la siguiente sección. En cada uno, conflict/sara está desprotegido y el estado está vacío. Anote el ID completo de conflict/sara en la copia de cancelación.
  2. Continue copy. Abrir gittree-continue. Haga clic derecho en conflict/omar y elija Merge conflict/omar into conflict/sara, con Always a merge commit. Se detiene. En el banner elija Resolve, abra index.html, elija Edit Output, escriba Review each change with confidence. y elija Save and Mark Resolved.
  3. Compruebe que no quede ningún conflicto y luego elija Continue en el banner una vez. El aviso dice "Listo". y la pancarta desaparece. El nuevo compromiso tiene dos padres.
  4. Abort copy. Abra gittree-abort e inicie la misma combinación. Deja el conflicto sin resolver. En el banner, elija Abort…. El cuadro de diálogo "¿Cancelar la operación?" explica que la rama, el índice y los archivos vuelven a ser lo que eran y que lo que se elimina se conserva primero en las instantáneas de recuperación. Elija Abort. El aviso dice "Abortado. El cambio que se eliminó se mantiene en refs/ogt/trash/…; Deshacer lo devuelve". (cuando la cancelación no arroja nada, dice "Abortado. El repositorio vuelve a estar donde estaba antes").
  5. Verifique el aborto: conflict/sara sigue siendo el ID que anotó, la página es el encabezado completo de Sara y no hay ningún banner.
  6. Skip copy. Abrir gittree-skip. Haga clic derecho en conflict/omar y elija Rebase conflict/sara onto conflict/omar. Deje las opciones desactivadas y elija Rebase conflict/sara. Se detiene. El banner ahora ofrece Skip junto a Continue y Abort…; el banner de combinación no tenía Saltar.
  7. Lea qué confirmación se está reproduciendo (la de Sara), acepte que al omitirla se omitirá su encabezado y elija Skip una vez. El aviso dice "Se saltó el paso".
  8. Verifique el salto: la página muestra el encabezado de Omar, conflict/sara ahora apunta al compromiso de Omar y no se muestra ningún banner. Compara los tres resultados y mantenlos separados.

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 limpia separada del resultado de la lección 18:

Command · bash
git switch --create conflict/sara
BASE_SHA="$(git rev-parse HEAD)"

Guarde SARA como index.html y luego:

Command · bash
git add -- index.html
git -c user.name="Sara Lindqvist" -c user.email=sara@example.com commit --quiet -m "feat: Sara clarifies the hero"
git switch --quiet --create conflict/omar "$BASE_SHA"

Guarde OMAR como index.html y luego:

Command · bash
git add -- index.html
git -c user.name="Omar Haddad" -c user.email=omar@example.com commit --quiet -m "feat: Omar explains the hero"
git switch --quiet conflict/sara

Haga tres copias limpias de este estado (gittree-continue, gittree-abort, gittree-skip). Primero, vea qué está activo cuando no esté seguro:

Command · bash
git status

Continue copy. La combinación se detiene con el código de salida 1. Guarde RESUELTO como index.html y luego:

Command · bash
git merge --no-ff --no-edit conflict/omar
git add -- index.html
git -c core.editor=true merge --continue
git ls-files --unmerged
git status --short

Los dos últimos comandos no imprimen nada. Abort copy:

Command · bash
git rev-parse conflict/sara
git merge --no-edit conflict/omar
git merge --abort
git rev-parse HEAD conflict/sara
git status --short

La fusión se detiene y git merge --abort la finaliza. Los dos ID impresos por git rev-parse HEAD conflict/sara son iguales, index.html es la página completa de Sara y el estado está vacío. Una rebase detenida se deja de la misma manera con git rebase --abort. Skip copy:

Command · bash
git rebase conflict/omar
git rebase --skip
git rev-parse HEAD conflict/omar
git status --short

La rebase se detiene; git rebase --skip lo termina con "Rebasado exitosamente". Los dos ID son iguales, por lo que la rama de Sara ahora se encuentra en la confirmación de Omar, la página es de Omar y el estado está vacío. El commit omitido de Sara ya no está en la rama, pero Git todavía lo tiene por un tiempo (relog, lección 29). No lea ese resultado como una resolución que mantuvo ambos aportes.

Resultado

Where you end: tres copias, tres resultados diferentes. La copia continua tiene una confirmación de fusión biparental con el encabezado combinado. La copia abortada está exactamente donde empezó, con el encabezado de Sara. La copia omitida tiene el encabezado de Omar y la rama de Sara en el compromiso de Omar. En los tres la operación ha finalizado y el estado es limpio.

Errores comunes

  • Usar Skip para "superar" un conflicto. Elimina el cambio de esa confirmación del resultado.
  • Iniciar otra fusión o rebase mientras una aún está detenida.
  • Usar git reset --hard para escapar, en lugar de git merge --abort o git rebase --abort.
  • Abortar cuando esté a un clic de terminar, o continuar cuando no esté seguro de lo que se está preparando.

Si algo sale mal

Si estás perdido, lee el banner o git status primero y decide nuevamente. Abortar es siempre el camino seguro para volver al principio. Si te saltaste por error, no empieces de nuevo a ciegas: la confirmación omitida aún se puede acceder por un tiempo desde el reflog (lección 29), y la lección 30 muestra lo que Deshacer de GitTree puede devolver.

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

    Una rebase se detuvo debido a un conflicto. Resolviste el archivo y lo organizaste. ¿Qué comando lleva a cabo la rebase?

    Elija una respuesta.

  2. Pregunta 2 de 6

    ¿Qué hace git rebase --skip?

    Elija cada respuesta que corresponda.

  3. Pregunta 3 de 6
    Requerido

    En la copia omitida, elige Omitir una vez. ¿Cómo se ven la página y la rama después?

    Elija una respuesta.

  4. Pregunta 4 de 6

    Cambie la entrada: en la copia continua resuelve el archivo y lo marca como resuelto, luego elige Abortar… en lugar de Continuar. ¿Qué pasa con tu resolución?

    Elija una respuesta.

  5. Pregunta 5 de 6
    Requerido

    Estás en medio de una fusión y buscas un botón Omitir en el banner, pero no está allí. ¿Por qué?

    Elija una respuesta.

  6. Pregunta 6 de 6
    Requerido

    Después de cancelar la fusión en la copia cancelada, ¿qué lecturas muestran que ha vuelto al principio?

    Elija cada respuesta que corresponda.

0 de 6 correcto

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

Comprobado en este navegador.

Practica

En cada copia, indique la operación, la elección y la prueba: para Continuar los dos padres y la lista vacía no fusionada, para Abortar los ID iguales y la página de Sara, para Saltar la página de Omar y la rama en su confirmación. Luego prediga por qué no se ofrece Skip para una fusión.

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

  • Descubra qué está activo antes de actuar.
  • Continúe después de resolver, omita solo para dejar un compromiso, cancele para regresar.
  • Verifique la confirmación, los archivos y el estado posterior.

Términos del glosario introducidos

Continuar — متابعة; saltar — تخطّي; abortar—إيقاف; operación — عملية.

Transcripción del vídeo

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

Mostrar la transcripción
  1. Se detiene una fusión o una rebase. tienes tres salidas.
  2. Continuar lo termina. Saltar deja uno comprometerse. Abortar vuelve atrás.
  3. Primero, averigüe siempre qué operación es activo.
  4. La pancarta lo nombra. En una terminal, git el estatus sí.
  5. Construir las sucursales de Sara y Omar, y Tres copias idénticas.
  6. Mismo comienzo, tres finales diferentes.
  7. Copia uno: continuamos. Iniciar la fusión, y se detiene.
  8. Resuelva, abra el archivo y escriba el título combinado.
  9. Guarde y marque resuelto, para que Git vea el archivo como hecho.
  10. Continuar está disponible ahora. Elígelo una vez.
  11. Hecho. El nuevo compromiso tiene dos padres, y la pancarta ha desaparecido.
  12. Copia dos: abortamos. Inicie la misma fusión.
  13. Deja el conflicto en paz y elige Abortar.
  14. El diálogo explica lo que regresa y lo que se guarda primero.
  15. El repositorio ha vuelto a donde estaba. antes.
  16. La punta de la sucursal tiene el mismo ID y la La página es de Sara otra vez.
  17. Copia tres: nos saltamos. Éste es un rebase.
  18. Rebase la rama de Sara en la de Omar. se detiene con un conflicto.
  19. Ahora el banner tiene un botón Saltar. una fusion nunca tuve uno.
  20. Skip deja el compromiso de Sara fuera del resultado. Di eso en voz alta.
  21. Elija Saltar una vez.
  22. La página muestra el rumbo de Omar. Sara La rama ahora se encuentra en su compromiso.
  23. Saltar no es una resolución. Se eliminó El cambio de Sara a partir de este resultado.
  24. En la terminal, git status muestra lo que es activo y los comandos.
  25. La fusión: agregue el archivo resuelto, luego git fusionar continuar.
  26. El aborto: la punta de la rama es la misma. antes y después.
  27. El salto: git rebase skip y la rama se sienta en el compromiso de Omar.
  28. En cada copia, el estado es vacío y nada queda sin fusionar.
  29. Cambiar la entrada: resolver el archivo, luego elija Abortar en su lugar.
  30. Su resolución se descarta, después de un Se guarda la instantánea de recuperación.
  31. Nunca utilices el reinicio difícil para escapar. Abortar es la salida segura.
  32. Si omitiste por error, el compromiso es Todavía en el reflog.
  33. Práctica: nombrar la operación, la elección, y la prueba, de cada ejemplar.
  34. A continuación, copie una única confirmación en otra. rama con selección de cereza.