Resolver Conflictos de Fusión de Ramas Usando la Terminal y `vi`

Gabriel Villacis - Jul 24 - - Dev Community

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
Enter fullscreen mode Exit fullscreen mode

En la rama main, archivo.txt se ha modificado a:

Línea 1
Línea 2 desde main
Enter fullscreen mode Exit fullscreen mode

En la rama rama1, archivo.txt se ha modificado a:

Línea 1
Línea 2 desde rama1
Enter fullscreen mode Exit fullscreen mode

Abre el terminal y navega a tu repositorio.

   cd ruta/a/tu/repositorio
Enter fullscreen mode Exit fullscreen mode

Intenta fusionar rama1 en main.

   git checkout main
   git merge rama1
Enter fullscreen mode Exit fullscreen mode

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.
Enter fullscreen mode Exit fullscreen mode

Paso 2: Abrir el Archivo con Conflicto en vi

Abre el archivo conflictivo usando vi.

   vi archivo.txt
Enter fullscreen mode Exit fullscreen mode

En vi, verás las líneas conflictivas marcadas así:

   <<<<<<< HEAD
   Línea 2 desde main
   =======
   Línea 2 desde rama1
   >>>>>>> rama1
Enter fullscreen mode Exit fullscreen mode

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 presiona Enter para guardar y salir.

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 presiona Enter para guardar y salir.

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 presiona Enter para guardar y salir.

Paso 4: Confirmar la Fusión

Después de resolver los conflictos, añade el archivo al índice:

   git add archivo.txt
Enter fullscreen mode Exit fullscreen mode

Finaliza la fusión con un commit:

   git commit -m "Resolver conflictos de fusión entre main y rama1"
Enter fullscreen mode Exit fullscreen mode

Paso 5: Verificar la Fusión

Verifica el historial de commits para asegurar que la fusión se completó correctamente:

   git log --oneline
Enter fullscreen mode Exit fullscreen mode

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!

. . . . . . . . . . . . . .
Terabox Video Player