Resuelve el conflicto de la guía

GitBeginner
Practicar Ahora

Introducción

La siguiente actualización de la guía del jardín incluye dos datos correctos en la misma línea. Tu commit preparado dirige a los visitantes a la entrada sur y actualiza el teléfono de atención a visitantes. El commit publicado por un compañero cambia el horario de apertura y la ruta sin escalones. La guía final necesita ambos conjuntos de información.

Este laboratorio comienza con sus propios repositorios independientes; no necesita archivos de la VM anterior. Verás un conflicto de contenido real, practicarás cómo cancelar una fusión sin terminar, combinarás los campos correctos y entregarás el resultado a un nuevo clon receptor.

Completa el laboratorio guiado anterior o asegúrate de comprender ya los nombres de remotos y las operaciones de obtención, fusión, envío y clonación. Los requisitos previos son la navegación básica por la terminal, los commits y las comparaciones de diferencias. La duración de 45 minutos es una estimación del autor.

Lee un conflicto y reinícialo de forma segura

En este paso, compararás las dos contribuciones, verás por qué se detiene la fusión automática y practicarás cómo volver de forma segura al estado local original.

Abre Terminal y entra en el repositorio preparado de forma independiente para este laboratorio:

cd /home/labex/project/guide-team/editor

Configura una identidad solo para este repositorio. --local evita cambiar la configuración global; las comillas mantienen unido el nombre. Estos valores sintéticos son ejemplos, no datos personales obligatorios:

git config --local user.name "Guide Editor"
git config --local user.email "guide@example.com"

Lee la guía local preparada y después obtén la actualización de tu compañero:

cat guide.txt
git fetch origin

Lee la versión de tu compañero. revision:path selecciona un archivo real guardado en un commit y --no-pager lo muestra directamente:

git --no-pager show origin/main:guide.txt

Tu versión dice South entrance con 09:00-17:00; la de tu compañero dice North entrance con 10:00-18:00. Las decisiones de la actividad son independientes: usa tu entrada sur y el nuevo horario de tu compañero. Conserva la frase sobre la última entrada. Mantén tu teléfono de atención a visitantes y la rampa junto al río de tu compañero, que se encuentran en las otras páginas.

Inicia la fusión. --no-edit evita un editor si la fusión se completa automáticamente. Aquí se espera que devuelva un estado distinto de cero y se detenga por un conflicto de contenido. Ejecútala por separado y después continúa:

git merge --no-edit origin/main

Se esperan CONFLICT (content): Merge conflict in guide.txt y Automatic merge failed; fix conflicts and then commit the result. Git no ha creado ningún commit nuevo.

Lee el estado abreviado y el archivo con conflicto:

git status --short
cat guide.txt

UU guide.txt significa que el archivo está sin fusionar. En el archivo, <<<<<<< HEAD inicia tu versión, ======= separa las alternativas y >>>>>>> origin/main termina la versión de tu compañero. Estos marcadores describen una discrepancia; borrar solo los marcadores dejaría líneas contradictorias. La página de la ruta puede estar ya preparada como M access.txt porque Git fusionó correctamente ese cambio independiente.

Antes de resolverlo, practica la recuperación. git merge --abort cancela únicamente la fusión sin terminar y devuelve los archivos bajo seguimiento y el índice al estado anterior a la fusión. Este escenario comenzó limpio; en el trabajo habitual, guarda en un commit o aparta las ediciones no relacionadas antes de iniciar una fusión.

git merge --abort
git status --short

No debería aparecer ningún cambio. Lee otra vez la guía: han vuelto la entrada sur original y el horario antiguo.

cat guide.txt

Ahora reinicia la misma fusión. Se esperan de nuevo el conflicto y el estado distinto de cero. Deja este segundo conflicto abierto para el siguiente paso:

git merge --no-edit origin/main
git status --short

El punto de comprobación espera un conflicto activo sin resolver en guide.txt. Si escribes mal una ruta, usa pwd y ls y después vuelve con el comando cd completo de arriba. No borres .git ni reinicies la VM para recuperarte de un error habitual de navegación.

Resuelve la información y completa la fusión

En este paso, convertirás el conflicto en una sola línea útil de la guía, conservando las páginas que Git ya fusionó.

Permanece en Terminal, en /home/labex/project/guide-team/editor, con el conflicto del paso anterior abierto. Necesitas South entrance de tu contribución y 10:00-18:00 de la de tu compañero. Elegir el archivo completo de cualquiera de las dos versiones perdería un cambio aprobado.

El siguiente comando reemplaza solo guide.txt con su resultado completo de tres líneas. > redirige la salida a ese archivo y reemplaza su contenido. <<'GUIDE' es un here-document: las líneas siguientes son entrada literal hasta una línea que contenga únicamente GUIDE. Copia el bloque entero, incluido su marcador final. Poner el marcador entre comillas evita la expansión del intérprete de comandos dentro del texto. No necesitas programar.

cat > guide.txt <<'GUIDE'
RIVERLIGHT GARDEN
Gate: South entrance; Hours: 10:00-18:00
Last entry is 30 minutes before closing.
GUIDE

Lee los tres archivos antes de prepararlos. La frase sobre la última entrada debe permanecer; access.txt debe contener la rampa junto al río; contacts.txt debe contener tu teléfono actualizado.

cat guide.txt
cat access.txt
cat contacts.txt

Contenido esperado de las páginas adicionales:

Step-free route: Use the riverside ramp
Visitor desk: 010-555-0120

git add registra el archivo resuelto en el índice y marca su conflicto como resuelto. Por sí solo no crea un commit:

git add guide.txt

Revisa qué añadirá la fusión respecto a tu commit local original. diff --cached compara el resultado preparado con HEAD; --no-pager mantiene la salida en esta terminal:

git --no-pager diff --cached

Se esperan el cambio de horario en guide.txt y el de la rampa en access.txt. Tu entrada sur y tu teléfono de atención a visitantes ya estaban en tu padre local, por lo que no tienen que aparecer como líneas nuevas en esta comparación. Comprueba los archivos finales además de esta diferencia.

Si ves un error de escritura, repite el bloque completo de la guía con la corrección y ejecuta de nuevo git add guide.txt. Si quieres abandonar por completo el intento sin terminar, usa git merge --abort del paso anterior, reinicia la fusión y repite la resolución. No uses abort después de completar el commit.

Finaliza la fusión con un mensaje descriptivo. -m proporciona el mensaje directamente en lugar de abrir un editor; se acepta otra redacción con significado:

git commit -m "Combine gate and opening hours"

Inspecciona sus dos líneas de ascendencia y el árbol de trabajo limpio:

git --no-pager log --oneline --graph --all --decorate
git status --short

No se espera ninguna salida de estado. Ambos mensajes de las contribuciones originales deben permanecer debajo de la nueva fusión. El punto de comprobación requiere ese historial y los archivos correctos completos, no solo la ausencia de marcadores de conflicto.

Publica y recibe la guía completa

En este paso, entregarás la revisión fusionada al repositorio compartido y la leerás desde una nueva copia receptora. Una fusión local por sí sola todavía no ha entregado nada a otra copia.

Permanece en Terminal, en /home/labex/project/guide-team/editor. push origin main envía el historial de la rama main local al repositorio llamado origin. Esta vez, la contribución compartida es un antecesor de tu fusión, por lo que el envío puede hacer avanzar la rama main compartida sin eliminarla.

git push origin main

Se espera main -> main sin rechazo. Si se rechaza, vuelve a obtener el historial e inspeccionar el gráfico; no añadas una opción de envío forzado. Este escenario preparado no tiene ningún colaborador actuando en segundo plano, pero un equipo real puede publicar trabajo nuevo en cualquier momento.

Ahora ve al directorio que contiene ambos repositorios:

cd /home/labex/project/guide-team

git clone crea un repositorio nuevo y archivos de trabajo a partir de un origen. Aquí shared.git es la ruta local de origen existente y received-guide es el nuevo directorio de destino. La copia receptora debe partir del repositorio compartido para revelar si la fusión se entregó realmente.

git clone shared.git received-guide

Se esperan Cloning into 'received-guide'... y done.. Si ya clonaste al experimentar, conserva esa copia: entra en received-guide y usa el comando git fetch origin aprendido anteriormente seguido de git merge --no-edit origin/main para actualizarla. No borres el repositorio de edición original para reintentar una clonación.

Entra en la copia receptora:

cd received-guide

Lee cada archivo real. cat muestra un archivo sin modificarlo:

cat guide.txt
cat access.txt
cat contacts.txt

Compara la información con los requisitos combinados de la actividad del paso anterior. Los tres archivos deben estar completos, incluidas las líneas sin cambios. Un mensaje de clonación correcta por sí solo no demuestra que la información sea correcta.

Por último, lee el historial de la copia receptora. --oneline abrevia cada commit, --graph dibuja sus enlaces con los padres y --decorate etiqueta los punteros de rama. --no-pager muestra la salida directamente en lugar de abrir un visor desplazable.

git --no-pager log --oneline --graph --decorate

La fusión superior tiene dos líneas de ascendencia, que incluyen ambos mensajes de las contribuciones originales y el commit inicial. Los identificadores exactos de tus commits varían. Comprueba que no se haya perdido contenido y que la copia receptora esté en main con un árbol de trabajo limpio para los archivos bajo seguimiento:

git status --short

La ausencia de salida significa que no hay cambios preparados, sin preparar ni archivos sin seguimiento. Has entregado un conjunto de archivos útil a través de repositorios Git reales, todos en esta única máquina de formación.

Resumen

Leíste las dos versiones de un conflicto real, usaste git merge --abort para recuperarte de forma segura y después compusiste los campos correctos en lugar de elegir una versión completa. Conservaste la ruta fusionada automáticamente, tu teléfono para visitantes y la frase de la guía que no se modificó.

La fusión publicada y el clon receptor independiente contienen ahora la guía completa, con ambas contribuciones originales conservadas. El desafío cambia el manual e invierte qué colaborador aporta cada campo correcto.