Saltar al contenido
GitTree

Lección 12 · trabajo diario

Tirar con avance rápido, fusionar o cambiar de base

Elija una política de extracción explícita después de inspeccionar la divergencia. Compare el rechazo de avance rápido, la fusión y el cambio de base privado utilizando tres copias y un servidor local aislado.

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

  • Separe la integración de recuperación de extracción.
  • Compare tres opciones políticas explícitas.
  • Reconocer el rechazo de sólo ff como resultado de la política.
  • Revise la configuración de políticas de aplicaciones persistentes y ascendentes.

Antes de empezar

Comience desde el proyecto del curso como lo dejó la lección 11, con main llevado al compromiso obtenido de Leo; llame a ese compromiso M. Luego tendrá tres copias ordinarias de una divergencia: un tema privado con un compromiso S y una rama del servidor actualizada-principal con un compromiso N diferente, ambos en M. El tema privado está actualizado y limpio. Cada uno apunta el origen solo a un nuevo servidor básico que contiene actualizado-principal/N y rastrea origen/actualizado-principal; El precio publicado anteriormente/el control remoto principal no ha cambiado.

El vídeo fue grabado con Git 2.52.0 y GitTree 2.0 en Ubuntu 24.04: la divergencia, la rama de rescate y el nuevo servidor se construyeron en la terminal; los tres extracciones, las vistas de resultados, el archivo de políticas y la restauración en modo extracción se realizaron en la aplicación; Los resultados fueron verificados en la terminal. No se ejecutó nada en macOS o Windows, y Ubuntu es el único sistema Linux registrado. El nivel mínimo de Git de origen de GitTree es 2.39.0.

GitTree te pide que inicies sesión; El plan gratuito cubre cada paso aquí. No se necesita cuenta de proveedor, Pro/trial, credencial API o servicio de Internet. Un origen desnudo local no es GitLab o CI. Todas las identidades utilizan example.com; nunca ejecute esta lección dentro de un proceso de pago de código fuente.

Realice mutaciones a través de GitTree o la ruta nativa en entradas idénticas, no ambas consecutivamente. La verificación de solo lectura puede seguir a cualquiera de los dos. Cualquier preparación descrita como trabajo terminal se etiqueta como preparación nativa, nunca como característica inventada de una aplicación.

Efectos de concepto y estado.

Pull es buscar seguido de la política de integración seleccionada; no es sinónimo de actualizar. Una fase de recuperación puede actualizar las referencias de seguimiento incluso cuando ff-only más tarde se niega a mover la sucursal local.

En S/N privado divergente, solo ff se rechaza, la fusión conserva ambas rutas y la rebase reproduce la confirmación privada en la base recuperada. No cambies de modo silenciosamente para hacer desaparecer un rechazo.

Los comandos del modo Pull de la paleta actualizan general.pullMode, una preferencia de toda la aplicación, no una marca de Git única. Grabe/restaure la configuración anterior en la aplicación de grabación. Los indicadores de extracción explícitos nativos que aparecen a continuación no cambian la configuración de esa aplicación.

Cada extracción recupera su origen sandbox. Solo FF deja el tema/índice/trabajo en S; fusionar y rebase actualizan solo sus propios temas y archivos. No se envía ninguna rama del servidor. Elegir la política de paleta también cambia la preferencia de toda la aplicación hasta que se restaure.

Prepare el estado exacto del proyecto

Comience con una copia ordinaria separada del proyecto limpio del curso tal como lo dejó la lección 11. Las características originales de gittree permanecen conservadas; No ejecute este escenario en el pago original o en el código fuente. (Un plan anterior del curso comenzó esta lección a partir del resultado de una lección combinada posterior; esa lección aún no está grabada, por lo que el video utiliza el proyecto de la lección 11 y los mismos pasos). Luego, realice la preparación exacta a continuación. La firma de demostración local del repositorio está desactivada y GitTree Demo <demo@example.com> es la identidad a menos que se nombre explícitamente a un compañero de equipo.

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 — REGÍSTRESE

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>
    <section aria-labelledby="signup-title">
      <h2 id="signup-title">Try the demo form</h2>
      <form id="signup-form" novalidate>
        <label for="demo-email">Demo email</label>
        <input id="demo-email" name="email" type="email" autocomplete="off" aria-describedby="signup-hint">
        <p id="signup-hint">Use a fictional example.com address. Nothing is sent.</p>
        <button type="submit">Check the address locally</button>
        <p id="signup-result" role="status"></p>
      </form>
    </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>

docs/integration-note.md — DOC_MERGE

Salida
# Integration review

This note was written on main while signup work was private.

docs/pull-policy.md — DOC_PULL

Salida
# Pull policy

Fetch first and inspect ancestry.
Use fast-forward only when no integration decision is needed.
Merge preserves existing commit identities; rebase recreates private commits.
Never rewrite someone else's published work without coordination.

En GitTree

Paleta: Comando+Mayús+P (Ctrl+Mayús+P en Ubuntu); escriba el comando con nombre exacto y selecciónelo. Las acciones de referencia con nombre usan el menú contextual de esa fila, no un acceso directo de paleta sin argumentos.

  1. Prepare las tres copias aisladas reales y su propio servidor/ascendente a continuación; registre el general.pullMode anterior antes de elegir una política.
  2. En copia FF, paleta Tirar: Sólo avance rápido, luego el botón Pull de la barra de herramientas; espere el rechazo genuino de la divergencia. El aviso de la aplicación dice "la función/formulario de registro no puede avanzar rápidamente", dice que ambas partes se han comprometido y la otra no, que no se cambió nada y ofrece Resolve… para fusionar, cambiar la base o restablecer. Permanece hasta que lo descartas, así que deséchalo antes de la siguiente copia.
  3. Inspeccionar la sugerencia del tema/trabajo sin cambios aunque el origen obtenido/actualizado-principal esté actual; no presione Force Push….
  4. En la copia de Combinar intacta, elija Extraer: Avanzar rápido si es posible, De lo contrario Combinar, luego el botón Extraer de la barra de herramientas; inspeccionar el resultado real de ambos padres.
  5. En una copia de Rebase intacta, elija Extraer: Rebase, luego Extraer; El tema actual es privado, no se necesita almacenamiento automático.
  6. Verifique la S′ recreada en N, combine los padres y equivalga a los árboles completos. Conserve cada resultado de forma independiente.
  7. Guarde DOC_PULL completo como docs/pull-policy.md en una copia de práctica solo después de conservar las instantáneas comparadas; déjelo sin comprometer aquí.
  8. Restaure explícitamente el modo Pull anterior de la aplicación de grabación; verifique que no se haya producido ningún cambio automático ni cambio principal original.

Para cada confirmación ordinaria: el resumen es el tema indicado; Descripción vacía; Modificar la confirmación anterior, omitir enlaces, agregar firmada por otro autor, presionar después de la confirmación y permitir la confirmación vacía; sin coautores. Prepare solo los archivos nombrados, luego confirme los cambios en N archivos una vez (Archivo para uno), o Comando+Entrar como alternativa. Espere el resultado real. Una lección que modifica explícitamente cambia sólo esa opción indicada.

en la terminal

En una copia limpia separada del proyecto, primero lleve main al compromiso obtenido de Leo (es decir, M), luego cree el tema privado:

Command · bash
git merge --ff-only --quiet origin/main
git switch --create feature/signup-form

Coloque el archivo de REGISTRO guardado en index.html (el video guardó los archivos de la lección en ~/Descargas y usa cp ~/Downloads/SIGNUP.html index.html), luego:

Command · bash
git add -- index.html
git commit --quiet -m "feat: add the local signup demonstration"
git branch rescue/signup-before-rebase
BASE_SHA="$(git rev-parse HEAD~1)"
git switch --quiet --create updated-main "$BASE_SHA"

En la página principal actualizada, coloque DOC_MERGE en docs/integration-note.md (cp ~/Downloads/DOC_MERGE.md docs/integration-note.md), luego:

Command · bash
git add -- docs/integration-note.md
git commit --quiet -m "docs: add the integration review"
git switch --quiet feature/signup-form

BASE_SHA es el padre M medido antes de la confirmación del registro privado. Tanto el tema como el principal actualizado ahora tienen una confirmación independiente; Rescue/signup-before-rebase conserva el tema anterior. No se publica nada de este tema.

A partir de esa copia previa a la rebase, prepare un servidor new que contenga solo N:

Command · bash
git clone --quiet --bare --single-branch --branch updated-main --no-local . ../gittree-pull-origin.git

Haga tres copias normales de la misma entrada con cp -R <source-demo-copy> <new-copy> mientras no haya ninguna operación Git/app activa, o copias equivalentes verificadas del sistema de archivos que preserven .git. En cada copia, reemplace el origen con la URL del archivo medido para ese nuevo servidor, busque y configure el tema en sentido ascendente; nunca reoriente el original:

Command · bash
git remote set-url origin "<measured-file-url>"
git fetch --quiet --prune origin
git branch --set-upstream-to=origin/updated-main feature/signup-form

Utilice la URL del archivo medido en lugar del marcador de posición. En copia FF:

Command · bash
git pull --quiet --ff-only origin updated-main

Salida medida 128; extracto de diagnóstico:

Salida
hint: Diverging branches can't be fast-forwarded, you need to either:
hint:
hint: 	git merge --no-ff
hint:
hint: or:
hint:
hint: 	git rebase
hint:
hint: Disable this message with "git config set advice.diverging false"
fatal: Not possible to fast-forward, aborting.

En copia combinada separada:

Command · bash
git pull --quiet --no-rebase --no-edit origin updated-main

En copia separada de Rebase:

Command · bash
git pull --quiet --rebase origin updated-main

Ambos tuvieron éxito; Las ID finales reales del árbol coincidieron, la fusión tenía dos padres y reprodujo uno. Para cada inspección:

Command · bash
git rev-list --parents -n 1 HEAD
git rev-parse 'HEAD^{tree}'
git status --short

Los SHA varían; los estados estaban limpios antes de la práctica opcional de archivo de políticas. Ningún comando empuja una rama.

Resultado

Where you end: La copia exclusiva de FF permanece en S y se rechaza después de la recuperación. La copia fusionada agrega una integración de dos padres; la copia de rebase crea S′ en N. Los árboles fusionados/rebase están de acuerdo; sin empujón. Preservar el archivo de políticas como práctica no comprometida solo después de realizar comparaciones.

Errores comunes

  • Suponer un gráfico directo significa que el antiguo ID de confirmación sobrevivió.
  • Tratar el panel alternativo como el punto de control original.
  • Repetir una mutación completada después del éxito de la aplicación.

Si algo sale mal

El rechazo de FF no es una pérdida de datos. Inspeccione las referencias locales/obtenidas y elija una política revisada para esa copia. Si la fusión/rebase se detiene, resuelva/Continúe o Aborte explícitamente; no realice otra parada sobre una operación activa.

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é es tirar aquí?

    Elija una respuesta.

  2. Pregunta 2 de 6

    ¿Qué puede pasar si se rechaza solo ff?

    Elija cada respuesta que corresponda.

  3. Pregunta 3 de 6
    Requerido

    Reproducción privada en N: ¿padre resultante?

    Elija una respuesta.

  4. Pregunta 4 de 6
    Requerido

    Cambiar el trabajo actual al tema compartido publicado: ¿rebase sigue siendo un consejo automático?

    Elija una respuesta.

  5. Pregunta 5 de 6

    ¿El comando de política de paleta cambia solo una vez?

    Elija una respuesta.

  6. Pregunta 6 de 6
    Requerido

    ¿Qué prueba la comparació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

Explique qué estado cambió en la copia rechazada, compare los dos árboles y padres exitosos y luego escriba la política DOC_PULL completa. Verifique que se haya restaurado la preferencia de la aplicación de grabació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

  • Pull incluye una política de integración.
  • La negativa puede seguir a una recuperación exitosa.
  • La persistencia de las políticas necesita una revisión explícita.

Términos del glosario introducidos

Rebase — إعادة تأسيس; repetición — إعادة تطبيق; referencia de rescate - مرجع حفظ.

Transcripción del vídeo

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

Mostrar la transcripción
  1. Comience desde el punto de control exacto.
  2. Nombra la sucursal, índice y versión funcional.
  3. Prepare sólo la copia aislada del curso.
  4. Nombra el río arriba y preservar las tres entradas.
  5. El avance rápido sólo rechaza esta divergencia.
  6. Una negativa puede seguir a una recuperación exitosa.
  7. La política de fusión preserva ambas historias.
  8. Vuelva a reproducir solo el tema privado.
  9. Comparar a los padres y árboles completos por separado.
  10. Escriba la política de extracción revisada después.
  11. Restaure la política anterior para toda la aplicación.
  12. ¿Qué es tirar aquí?
  13. Pull tiene una fase de transporte y fase local gobernada por políticas.
  14. ¿Qué puede pasar si se rechaza solo ff?
  15. La búsqueda puede finalizar antes la integración rechaza la divergencia.
  16. Reproducción privada en N: ¿padre resultante?
  17. Rebase crea S′ en N, a diferencia de fusionar K.
  18. Cambiar el trabajo actual a publicado compartido Tema: ¿rebase sigue siendo un consejo automático?
  19. Los supuestos exclusivamente privados ya no son válidos.
  20. Comando de política de paleta cambia solo un tirón?
  21. La fuente escribe general.pullMode hasta que otra elección lo restaure.
  22. ¿Qué prueba la comparación?
  23. Comparar el estado real en lugar que ordenar el silencio.
  24. Verifique el resultado real, no sólo un mensaje.
  25. Predecir la entrada modificada antes de actuar.
  26. Preservar el trabajo útil antes de la recuperación.
  27. Pruebe el punto de control antes de continuar.
  28. Mantener el resultado verificado para el siguiente paso.