Lección 18 · Historia e integración
Fusionar ramas con historia divergente
Combine la función de tarjeta de flujo de trabajo publicada con la accesibilidad independiente principal y los cambios en el pie de página. Verifique una fusión real de dos padres y la página resultante completa.
- Nivel: Intermedio
- 9 minutos de lectura
- 4 minutos de vídeo
- Actualizado
- Antes de esta lección: Cree una rama de funciones y retire solo la referencia desechable
Progreso guardado en este navegador.
La reproducción carga el vídeo de YouTube (modo de privacidad mejorada).
lo que aprenderás
- Reconocer la divergencia con la ascendencia.
- Elija un modo de grabación combinado explícito.
- Verifique ambos padres y el contenido combinado.
- Mantenga la combinación local separada de la publicación del servidor.
Antes de empezar
Comience donde terminó la lección 17: principal con el compromiso README de Maya, limpio; las tarjetas de características/precios publicadas siguen siendo F1, ramificándose desde H5. Guarda y confirma MAIN_ACCESSIBLE como preparación, de modo que main y la característica tengan confirmaciones independientes.
El vídeo fue grabado con Git 2.52.0 y GitTree 2.0 en Ubuntu 24.04: la página, su confirmación y la fusión se realizaron en la aplicación; En el estado anterior, el avance rápido se negó en una copia separada y las comprobaciones (incluida la pelusa, la prueba y la compilación del propio proyecto) se ejecutaron 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.
La divergencia significa que ninguna de las puntas es simplemente el descendiente al que la otra rama puede avanzar rápidamente. Git encuentra un ancestro común y combina los cambios relativos a él. El nombre de una rama por sí solo no puede indicarle si se necesita una confirmación de fusión.
Una confirmación de fusión registra dos padres en orden. El primer padre es el consejo previo de la sucursal retirada; el segundo es el lado fusionado. Las confirmaciones de funciones existentes mantienen sus identidades; una nueva confirmación de fusión conecta su ascendencia.
Ningún conflicto textual no es prueba de corrección semántica. Verifique la sección principal enfocable, el flujo de trabajo y el recordatorio de Leo en el archivo completo; ejecutar comprobaciones existentes. Una fusión local no actualiza el origen hasta que se realiza una inserción autorizada por separado.
Preparación y fusión, mover local principal/HEAD y actualizar índice/trabajo. La referencia de característica sigue siendo F1. Tanto las ramas de origen como la v0.1.0 conservan sus consejos anteriores.
Prepare el estado exacto del proyecto
En el guardado principal MAIN_ACCESSIBLE, prepare solo index.html y confirme la corrección: haga que el punto de referencia principal sea enfocable. Esto hace que la entrada de fusión nativa/aplicación sea explícita; no confirme el archivo fusionado ya combinado antes de fusionarlo.
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 — MAIN_ACCESSIBLE
<!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>
</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 — FUSIONADO
<!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>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.
- Guarde MAIN_ACCESSIBLE a través de Mostrar archivos → index.html → Guardar; revise solo la adición del índice de tabulaciones.
- Mostrar cambios de trabajo; Archivo de etapa index.html; Corrección de confirmación: haga que el punto de referencia principal sea enfocable con las opciones normales desactivadas.
- Inspeccionar la ascendencia del gráfico principal y de tarjetas de características/precios; mantenga la principal revisada.
- En Local, abra la carpeta feature, haga clic derecho en pricing-cards → Merge feature/pricing-cards into main. El diálogo sigue con Record it as.
- En Record it as las opciones son Avanzar rápido si es posible; en caso contrario, una confirmación de fusión; Always a merge commit; Sólo avance rápido; y Squash en cambios por etapas (sin compromiso). Seleccione Siempre una confirmación de fusión. Cancele si la vista previa real muestra rutas o conflictos inesperados.
- Elija Fusionar una vez y espere a que se complete. No sustituya Squash en cambios por etapas.
- Inspeccione los dos padres de la confirmación resultante y compare el index.html completo con MERGED; verificar los tres cambios independientes.
- Ejecute las comprobaciones locales y consultas de estado de limpieza; deje main en la fusión local, sin Push After Commit. El asunto de fusión de la aplicación es “Fusionar rama 'tarjetas de características/precios'”; no tiene que coincidir con el mensaje nativo a continuación.
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
Después de guardar MAIN_ACCESSIBLE, preparación nativa y fusión:
git add -- index.html
git commit --quiet -m "fix: make the main landmark focusable"
git branch course-before-merge
git merge --quiet --no-ff feature/pricing-cards --message "merge: combine workflow cards with accessibility"
git log -1 --format=%s
git rev-list --parents -n 1 HEAD
git status --shortAsunto real:
merge: combine workflow cards with accessibilityLa consulta principal emite un SHA de combinación real seguido de exactamente dos SHA principales; Las identificaciones varían. El index.html fusionado completo coincidió con FUSIONADO byte por byte en el dispositivo; El estado estaba vacío. El asunto nativo explícito no necesita coincidir con el asunto generado por la aplicación: acepte el mensaje real de la aplicación si la ascendencia/el contenido están de acuerdo, nunca superponga un mensaje nativo falso.
npm run --silent lint
npm test -- --test-reporter=tap
npm run --silent buildEjecútelos contra el punto de control fusionado; El texto fuente y el recuento de los padres por sí solos no prueban las verificaciones. El conjunto de accesorios tiene seis pruebas. Un intento separado de solo ff en la entrada divergente debe rechazarse en lugar de elegir silenciosamente este modo de fusión.
Resultado
Where you end: Puntos principales para fusionar M con el primer padre, la sugerencia principal preparada y el segundo padre F1; La página FUSIONADA completa contiene tarjetas de flujo de trabajo, pie de página Leo y página principal enfocable. Índice/trabajo limpio; sin empuje remoto.
Errores comunes
- Fusionando la dirección equivocada.
- Llamar a una calabaza una fusión de dos padres.
- Confiar en la vista previa sin conflictos como prueba semántica.
Si algo sale mal
Si se detiene una fusión real, mantenga su estado de operación y use el flujo de trabajo de conflicto/aborto que se enseñará más adelante; no emita un reinicio no relacionado. Antes de completar una fusión nativa, course-before-merge conserva solo la sugerencia antigua comprometida, no bytes de trabajo arbitrarios.
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
Verifique los bytes fusionados exactos y los dos padres reales, con F1 sin cambios. Prediga que se rechace el avance rápido sólo en la entrada divergente original; prueba sólo en una copia separada.
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
- La divergencia es una relación de ascendencia.
- La fusión conserva las identidades de confirmación antiguas.
- Se requieren verificaciones de contenido y de los padres.
Relacionado
Términos del glosario introducidos
Fusionar — دمج; confirmación de fusión - إيداع دمج; ancestro común—سلف مشترك; primer padre: الأب الأول.
Transcripción del vídeo
La narración del vídeo, cue a cue.
Mostrar la transcripción
- Comience desde el punto de control exacto.
- Nombra la sucursal, índice y versión funcional.
- Prepare sólo la copia aislada del curso.
- preparar al independiente cambio de accesibilidad.
- Registre sólo el cambio principal previsto.
- Inspeccione la ascendencia divergente real.
- Fusionar la función con la principal actual.
- Elija el modo de grabación deliberadamente.
- Espere el resultado real de la fusión.
- Verifique ambos padres y el contenido combinado.
- Mantenga esta combinación local hasta que se revise.
- ¿Qué hace que una confirmación de fusión sea distinta?
- La ascendencia está definida por los padres. Identificaciones, no mensaje ni color.
- ¿Qué evidencia se necesita?
- Una fusión estructuralmente válida todavía puede tener contenido incorrecto.
- ¿Qué pasa con la identidad de la F1?
- Fusionar conecta confirmaciones existentes en lugar de reproducirlos.
- Elija solo ff en esto entrada divergente: ¿resultado?
- Ninguna propina es la requerida. descendiente para un avance rápido simple.
- Sin conflicto textual ¿Significa que las pruebas son innecesarias?
- Necesidades de corrección semántica revisión de contenidos y pruebas.
- ¿Cuál es el alcance final?
- Ningún empujón forma parte de esta fusión local.
- Verifique el resultado real, no sólo un mensaje.
- Predecir la entrada modificada antes de actuar.
- Preservar el trabajo útil antes de la recuperación.
- Pruebe el punto de control antes de continuar.
- Mantener el resultado verificado para el siguiente paso.