Joaquin Martinez

Depura tus errores y construye la mejor versión de ti, cada línea cuenta.

Cómo manejar conflictos en git: Guía paso a paso con ejemplos prácticos

24-01-2025
Git y GitHub
Git
Cover Post

Cómo resolver conflictos en Git: Guía práctica para desarrolladores

Los conflictos en Git son situaciones que ocurren cuando Git no puede fusionar automáticamente los cambios de dos ramas. Esto sucede cuando hay modificaciones en la misma línea de código o en el mismo archivo, obligando a Git a detener el proceso y a solicitar nuestra intervención para resolver dicho conflicto.

¿Por qué ocurren los conflictos?

Los conflictos surgen principalmente por dos razones:

  • Un compañero de equipo modificó la misma línea de código que nosotros.
  • Nosotros mismos hicimos cambios en el mismo archivo y en las mismas líneas en dos ramas diferentes.

Git nos ayuda a gestionar estos escenarios, pero es fundamental saber cómo tomar el control cuando el proceso automático de fusión falla.

Escenario práctico: creando un conflicto de merge

Para entender cómo solucionar un conflicto de merge, vamos a replicar el problema. Sigue estos pasos para crear un escenario de conflicto y practicar su resolución:

  1. Crear una nueva rama:
    Comenzaremos creando una nueva rama llamada rama-conflicto.

     git checkout -b rama-conflicto
    

    alt text

  2. Hacer cambios en la nueva rama:
    Ahora, modifica el archivo misiones.md en la rama rama-conflicto y guarda los cambios.

    alt text

    Realiza el commit de estos cambios.

    alt text

  3. Hacer cambios en la rama master:
    Vuelve a la rama principal (master) y haz un cambio en la misma línea del archivo misiones.md que modificaste anteriormente.

     git checkout master
    

    alt text

    Guarda el archivo.

    alt text

    Realiza el commit de esta nueva modificación.

    alt text

Resolviendo el conflicto de merge

Ahora que hemos modificado el mismo archivo en dos ramas distintas, al intentar unirlas, Git nos mostrará un conflicto. El proceso de unificación de ramas, conocido como merge, no se completará automáticamente.

  1. Intentar la fusión:
    Desde la rama master, ejecuta el comando git merge para intentar unir rama-conflicto.

     git merge rama-conflicto
    

    alt text

    Como se esperaba, Git detiene el proceso y nos avisa del conflicto.

  2. Identificar y editar los cambios:
    Si regresas a tu editor de código (como VS Code), verás que el archivo misiones.md ahora tiene marcadores especiales que indican las áreas del conflicto.

    alt text

    Estos marcadores te muestran los cambios de ambas ramas:

    • «««< HEAD: Indica el inicio de los cambios de la rama actual (master).
    • =======: Separa los cambios de la rama actual de los de la rama que quieres fusionar.
    • »»»> rama-conflicto: Indica el final de los cambios de la otra rama (rama-conflicto).
  3. Solucionar el problema manualmente:
    Para solucionar el conflicto, debes editar el archivo manualmente y decidir con qué cambios te quieres quedar. Puedes:

    • Mantener solo los cambios de master.
    • Mantener solo los cambios de rama-conflicto.
    • Combinar ambas versiones.
    • Crear una versión completamente nueva.

    Una vez que hayas editado el contenido y eliminado los marcadores de conflicto, guarda el archivo.

    alt text

  4. Finalizar la fusión:
    Después de guardar los cambios, el conflicto de Git ya está resuelto. Ahora solo queda indicar a Git que el problema ha sido solucionado. Para ello, añade el archivo al staging area y realiza un nuevo commit.

     git commit -am "Unión de ramas con conflicto solucionado"
    

    alt text

    Con este commit, la fusión queda registrada en el historial del proyecto.

Limpieza de ramas

Una vez que la fusión se ha completado con éxito, ya no necesitas la rama que causó el conflicto. Es una buena práctica eliminar las ramas que ya no son necesarias para mantener tu repositorio limpio y organizado.

git branch -d rama-conflicto

alt text

Al dominar esta técnica, podrás resolver conflictos de Git con confianza y mantener un flujo de trabajo fluido en cualquier proyecto.

Post Siguiente

Versiones y Releases con Git Tags: Un tutorial práctico

Post Anterior

Unión de ramas en Git: El escenario de la unión automática