Introducción
En este tutorial, aprenderás cómo resolver conflictos de fusión de ramas en Git utilizando solo la terminal y el editor vi. Supongamos que tienes un repositorio con dos ramas (main y rama1) y que al intentar fusionar rama1 en main, se produce un conflicto en un archivo llamado archivo.txt.
Paso 1: Simular el Escenario de Conflicto
Supongamos que el contenido inicial de archivo.txt es el siguiente:
Línea 1
En la rama main, archivo.txt se ha modificado a:
Línea 1
Línea 2 desde main
En la rama rama1, archivo.txt se ha modificado a:
Línea 1
Línea 2 desde rama1
- Abre el terminal y navega a tu repositorio.
cd ruta/a/tu/repositorio
- Intenta fusionar
rama1enmain.
git checkout main
git merge rama1
Verás un mensaje de conflicto, algo como esto:
CONFLICT (content): Merge conflict in archivo.txt
Automatic merge failed; fix conflicts and then commit the result.
Paso 2: Abrir el Archivo con Conflicto en vi
- Abre el archivo conflictivo usando
vi.
vi archivo.txt
- En
vi, verás las líneas conflictivas marcadas así:
<<<<<<< HEAD
Línea 2 desde main
=======
Línea 2 desde rama1
>>>>>>> rama1
Aquí, HEAD representa los cambios en la rama actual (main), y rama1 representa los cambios traídos desde rama1.
Paso 3: Resolver el Conflicto
Opciones para Resolver el Conflicto
A continuación, se plantean 3 opciones que se pueden escoger para resolver el conflicto.
Opción 1. Mantener los cambios actuales (HEAD):
Si decides que los cambios en
maindeben prevalecer, elimina las líneas entre=======y>>>>>>> rama1, así como las marcas de conflicto.
CODE<<<<<<< HEAD
Línea 2 desde main
=======
>>>>>>> rama1
Resultado final del archivo:
CODELínea 1
Línea 2 desde main
En
vi:
- Presiona
ipara entrar en modo de inserción. - Edita el archivo para eliminar las líneas innecesarias.
- Presiona
Escpara salir del modo de inserción. - Escribe
:wqy presionaEnterpara guardar y salir.
- Presiona
Opción 2. Aceptar los cambios entrantes (rama1):
Si decides que los cambios en
rama1deben prevalecer, elimina las líneas entre<<<<<<< HEADy=======, así como las marcas de conflicto.
CODE<<<<<<< HEAD
=======
Línea 2 desde rama1
>>>>>>> rama1
Resultado final del archivo:
CODELínea 1
Línea 2 desde rama1
En
vi:
- Presiona
ipara entrar en modo de inserción. - Edita el archivo para eliminar las líneas innecesarias.
- Presiona
Escpara salir del modo de inserción. - Escribe
:wqy presionaEnterpara guardar y salir.
- Presiona
Opción 3. Combinar ambos cambios:
Si deseas combinar ambos cambios, edita el archivo para incluir ambos conjuntos de cambios de forma coherente.
CODE<<<<<<< HEAD
Línea 2 desde main
=======
Línea 2 desde rama1
>>>>>>> rama1
Resultado final del archivo:
CODELínea 1
Línea 2 desde main
Línea 2 desde rama1
En
vi:
- Presiona
ipara entrar en modo de inserción. - Edita el archivo para combinar los cambios:
CODELínea 1
Línea 2 desde main
Línea 2 desde rama1
- Presiona
Escpara salir del modo de inserción. - Escribe
:wqy presionaEnterpara guardar y salir.
- Presiona
Paso 4: Confirmar la Fusión
- Después de resolver los conflictos, añade el archivo al índice:
git add archivo.txt
- Finaliza la fusión con un commit:
git commit -m "Resolver conflictos de fusión entre main y rama1"
Paso 5: Verificar la Fusión
- Verifica el historial de commits para asegurar que la fusión se completó correctamente:
git log --oneline
Deberías ver un commit de fusión en el historial.
Resumen
Este tutorial te muestra cómo resolver conflictos de fusión de ramas utilizando la terminal y el editor vi. Aquí tienes los pasos clave:
- Identificar y abrir el archivo con conflictos.
- Usar
vipara editar y resolver los conflictos, eligiendo mantener los cambios actuales, aceptar los cambios entrantes o combinar ambos, mostrando claramente cómo debería quedar el archivo en cada caso. - Añadir el archivo resuelto al índice.
- Confirmar la fusión.
Resolver conflictos de esta manera puede parecer intimidante al principio, pero es una habilidad valiosa que te ayudará a manejar el control de versiones de manera más eficiente. ¡Buena suerte!
SOCIAL SHARE CARD GENERATOR