Introducción
Riverlight Garden necesita una guía correcta para sus visitantes. Tu commit local ya preparado traslada la entrada y actualiza el número de teléfono de atención a visitantes. Un compañero ya ha publicado una nueva ruta sin escalones. Los visitantes necesitan las tres correcciones.
Obtendrás el trabajo de tu compañero, fusionarás los cambios independientes y publicarás el resultado. Un nuevo clon receptor te permitirá consultar los archivos realmente entregados. El repositorio compartido y ambas copias son directorios locales en una sola máquina de formación; se trata de colaboración real con Git sin un servicio alojado, configuración de servidor ni cuenta.
Ya debes reconocer los commits, una rama, git add, git commit y una comparación de diferencias básica. Aquí se explican los nombres de remotos y las operaciones de obtención, fusión, envío y clonación. La duración de 35 minutos es una estimación del autor que incluye la lectura y los errores habituales.
Descubre la actualización de tu compañero
En este paso, descubrirás por qué todavía no puedes entregar tu actualización local preparada y después obtendrás la revisión de tu compañero sin modificar tus archivos.
Abre Terminal. Empieza en el repositorio de edición preparado:
cd /home/labex/project/guide-team/editor
cd cambia el directorio de trabajo de esta terminal. Si escribes mal una ruta, usa pwd para mostrar tu directorio actual y ls para listar su contenido; después repite el comando cd completo de arriba. Estos errores habituales de navegación no requieren una VM nueva.
El nuevo commit de fusión necesitará una identidad de autor. --local guarda esta configuración solo en este repositorio. El texto entre comillas es un único valor aunque contenga espacios; el correo de ejemplo es sintético. Puedes elegir tu propio nombre y correo electrónico.
git config --local user.name "Guide Editor"
git config --local user.email "guide@example.com"
Tu commit local existente ya está completo. Lee su información para visitantes:
cat guide.txt
cat contacts.txt
Deberías ver South entrance y el teléfono de atención a visitantes 010-555-0120. Conserva la frase sobre la última entrada en la guía. El archivo de la ruta, que es independiente, todavía dice Use the north ramp:
cat access.txt
git status --short muestra una lista compacta de los archivos modificados. Que aquí no aparezca ninguna salida significa que la contribución preparada está guardada en un commit y el árbol de trabajo está limpio:
git status --short
Un remoto es una conexión con nombre a otro repositorio. origin es el nombre de esta conexión, no un servidor especial. -v muestra sus direcciones de obtención y envío:
git remote -v
Ambas direcciones apuntan a /home/labex/project/guide-team/shared.git. Este es un repositorio bare: almacena el historial compartido sin una copia de trabajo editable. No edites sus archivos internos.
Intenta entregar tu rama. push envía commits; main identifica la rama que se actualizará en origin. Se espera que este primer push falle con un estado de salida distinto de cero. Ejecútalo por separado y continúa después del rechazo:
git push origin main
Busca [rejected], main -> main y (fetch first). La rama compartida contiene trabajo que tu historial actual no incluye, por lo que Git se niega a reemplazarla. Esta es una actualización que no es de avance rápido: la punta compartida existente no es un antecesor de la punta propuesta. Un envío forzado descartaría de la rama la contribución de tu compañero e incumpliría esta tarea.
fetch descarga los commits remotos y actualiza un puntero local de seguimiento remoto, origin/main. No los fusiona con tu propia rama main ni reescribe tus archivos de trabajo:
git fetch origin
Compara los historiales. --oneline muestra una línea breve por commit; --graph dibuja las conexiones con los padres; --all incluye tanto las ramas locales como las de seguimiento remoto; --decorate añade sus etiquetas. --no-pager muestra la salida directamente; si abres un paginador al experimentar, pulsa q para salir.
git --no-pager log --oneline --graph --all --decorate
Localiza Move the gate and update the visitor desk en HEAD -> main y Update the step-free route en origin/main. Ambos descienden de Open the garden guide. HEAD identifica el commit actualmente extraído. Las dos contribuciones son diferentes; ninguna sustituye a la otra.
Lee la ruta de tu compañero directamente desde su instantánea. show acepta una expresión revision:path, por lo que origin/main:access.txt significa ese archivo en la revisión obtenida:
git --no-pager show origin/main:access.txt
Dice Use the riverside ramp. Tu archivo de trabajo de la ruta todavía dice Use the north ramp. Esta diferencia demuestra que la obtención hizo disponible el nuevo historial sin tocar tu árbol de trabajo. El primer punto de comprobación acepta esa revisión obtenida siempre que tu commit local original siga intacto.
Combina las contribuciones independientes
En este paso, combinarás los dos historiales en una revisión que contenga la entrada sur, el número de teléfono actualizado de atención a visitantes y la rampa junto al río.
Permanece en Terminal, en /home/labex/project/guide-team/editor. Una fusión combina historiales. Como estos cambios afectan a archivos diferentes, Git puede combinar sus textos automáticamente. --no-edit acepta el mensaje de fusión generado por Git y evita abrir un editor:
git merge --no-edit origin/main
Se espera un resumen de fusión correcta, normalmente Merge made by the 'ort' strategy.. Git crea un commit de fusión con dos padres: tu commit original y el commit original de tu compañero. Ninguna contribución se reescribe.
Lee los archivos combinados reales:
cat guide.txt
cat access.txt
cat contacts.txt
La guía debe conservar South entrance, 09:00-17:00 y la frase sobre la última entrada; la ruta debe decir Use the riverside ramp; el teléfono debe seguir siendo 010-555-0120. Los cambios independientes se combinaron sin problemas, pero todavía debes valorar su significado.
Revisa el historial resultante:
git --no-pager log --oneline --graph --all --decorate
La fusión en HEAD -> main une las líneas de ambas contribuciones. origin/main sigue etiquetando el commit de tu compañero obtenido anteriormente hasta que hagas push. Esto es normal: la fusión cambió la rama main local, no la rama main compartida.
Comprueba el estado de trabajo:
git status --short
No se espera ninguna salida. Si otro experimento dejó una fusión en curso, git merge --abort cancela esa fusión sin terminar y restaura el estado anterior a la fusión; ejecútalo solo mientras haya una fusión en curso y después repite el comando de fusión. No cancela un commit que ya se haya completado. El punto de comprobación requiere un commit de fusión combinado con ambos padres originales y los tres archivos completos.
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
Gestionaste un rechazo real de push, obtuviste el commit de un compañero sin sobrescribir tus propios archivos, fusionaste dos contribuciones independientes y entregaste la guía completa a través de un repositorio compartido. Un clon receptor real contenía la guía combinada, la ruta sin escalones y el contacto para visitantes.
Los commits originales permanecen en el historial. A continuación, practica una fusión en la que Git necesita tu criterio porque ambas personas cambiaron la misma línea.



