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 rama1
en main
.
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
main
deben prevalecer, elimina las líneas entre=======
y>>>>>>> rama1
, así como las marcas de conflicto.
<<<<<<< HEAD Línea 2 desde main ======= >>>>>>> rama1
-
Resultado final del archivo:
Línea 1 Línea 2 desde main
-
En
vi
:- Presiona
i
para entrar en modo de inserción. - Edita el archivo para eliminar las líneas innecesarias.
- Presiona
Esc
para salir del modo de inserción. - Escribe
:wq
y presionaEnter
para guardar y salir.
- Presiona
Opción 2. Aceptar los cambios entrantes (rama1):
-
Si decides que los cambios en
rama1
deben prevalecer, elimina las líneas entre<<<<<<< HEAD
y=======
, así como las marcas de conflicto.
<<<<<<< HEAD ======= Línea 2 desde rama1 >>>>>>> rama1
-
Resultado final del archivo:
Línea 1 Línea 2 desde rama1
-
En
vi
:- Presiona
i
para entrar en modo de inserción. - Edita el archivo para eliminar las líneas innecesarias.
- Presiona
Esc
para salir del modo de inserción. - Escribe
:wq
y presionaEnter
para 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.
<<<<<<< HEAD Línea 2 desde main ======= Línea 2 desde rama1 >>>>>>> rama1
-
Resultado final del archivo:
Línea 1 Línea 2 desde main Línea 2 desde rama1
-
En
vi
:- Presiona
i
para entrar en modo de inserción. - Edita el archivo para combinar los cambios:
Línea 1 Línea 2 desde main Línea 2 desde rama1
- Presiona
Esc
para salir del modo de inserción. - Escribe
:wq
y presionaEnter
para 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
vi
para 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!
Top comments (0)