UP | HOME

Git: conflictos al mezclar

Table of Contents

Como se comentón anteriormente, al mezclar, se pueden producir conflictos, que se dan cuando dos programadores modifican el mismo fichero en la misma línea.

No es ninguna anomalía ni nada excepcional encontrarse con estos escenarios, aunque la vida es mucho más fácil cuando no se dan estos conflictos.

Cuando se dan, el programador que se topa con ellos tendrá que resolver los conflictos "a mano", ya que Git no puede decidir automáticamente qué hacer.

Conflictos y su resolución

Para entenderlo, veamos un ejemplo concreto, a través del siguiente escenario:

  1. Una programadora llamada Alice modifica en la rama ramaalice un fichero llamado documento.txt, escribiendo en la línea 3 el texto "Hola Mundo!".
  2. Un programador llamado Bob modifica en la rama ramabob el mismo fichero llamado document.txt, escribiendo en la línea 3 el texto "Hola Git!".
  3. Alice mezcla los cambios hechos en la rama ramaalice en main (que se hace sin problemas):
[alice@computer project]$ git merge rama_alice
Actualizando ee498ed..90aff66
Fast-forward
 documento.txt | 1 +
 1 file changed, 1 insertion(+)
  1. Bob mezcla los cambios hechos en la rama ramabob en main pero Git muestra un error por pantalla porque se está intentando modificar la misma línea que modificó Alice desde el mismo origen y estado del proyecto:
[bob@computer project]$ git merge rama_bob
Auto-fusionando documento.txt
CONFLICTO (contenido): Conflicto de fusión en documento.txt
Fusión automática falló; arregle los conflictos y luego realice un commit con el resultado.
  1. A Bob le tocará resolver dicho conflicto abriendo los ficheros donde se han producido estos conflictos (en este caso solo un fichero, el llamado documento.txt) y decidiendo el contenido de los mismos
  2. Cuando abra el fichero documento.xt verá unas marcas que empiezan por <<<<<<<, ======= y >>>>>>>
Título del texto

<<<<<<< HEAD
Hola Mundo!
=======
Hola Git!
>>>>>>> rama_bob

Te explico el significado de dichas marcas:

  • Debajo de <<<<<<< HEAD está el contenido de la línea en el último commit.
  • Arriba de >>>>>>> rama_bob está el contenido de la línea en la rama rama_bob que se pretende mezclar.
  • Los caracteres ======= es el separador entre el contenido de la línea en ambos lugares.

¿Cómo se resuelve el conflicto? Como quieras y corresponda según el contexto pero teniendo en cuenta que las marcas especiales deben quedar eliminadas del resultado final.

  1. Una posible solución sería el siguiente. Editamos el fichero documento.txt para dejarlo tal que así:
Título del texto                                                                                             

Hola Mundo Git!
  1. Al guardar los cambios, verás que si haces un git status obtienes la siguiente salida:
[bob@computer project]$ git status
En la rama main
Todos los conflictos resueltos pero sigues fusionando.
  (usa "git commit" para concluir la fusión)

Cambios a ser confirmados:
    modificados:     documento.txt


  1. Que significa que hay cambios a ser confirmados. Automáticamente, Git, ha añadido los cambios hechos en el stage o área de preparacion para podamos crear un commit y terminar de resolver el conflicto.
  2. Una vez hecho el git commit hemos terminado de resolver los conflictos.

Comando de git que no tienes que olvidar

La clave de todo es usar el comando git status para ver en todo momento cómo está la situacion en el repositorio.

Author: Román Ginés Martínez Ferrández

Created: 2025-07-24 jue 18:27

Validate