¿Cómo se resuelven los conflictos de fusión en Git?

Publicado: 2021-09-16

Si alguna vez ha trabajado en software a gran escala en colaboración con otros desarrolladores, debe conocer el control de versiones. Git es uno de los sistemas de control de versiones de código abierto más utilizados que permite a los desarrolladores trabajar simultáneamente y colaborar, incluso desde ubicaciones remotas y distantes. Sin embargo, dado que muchos usuarios trabajan simultáneamente, existen posibilidades de conflictos que deben solucionarse. A través de este artículo, explicaremos los conceptos básicos de los conflictos de combinación en Git y cómo puede resolver los conflictos de combinación en Git.

Tabla de contenido

¿Qué es Merge Conflict en Git?

Todas las herramientas de control de versiones actuales funcionan en una característica clave: la capacidad de diferentes programadores para trabajar en un archivo al mismo tiempo sin causar ninguna perturbación en el trabajo de los demás. Git permite esto implementando algo llamado 'rama'. Múltiples desarrolladores primero pueden trabajar en sucursales individuales localmente. Luego, deben enviar el código a un repositorio centralizado. A partir de ahí, otros usuarios pueden recuperar el código actualizado en su sucursal local y continuar con su propio trabajo.

Cuando se producen estos cambios paralelos en tiempo real, siempre existe la posibilidad de que el trabajo se superponga. A veces, varios desarrolladores pueden terminar cambiando la misma línea de código de varias maneras. En tales escenarios, GIt no puede identificar la versión correcta del código, ya que eso es algo que solo el desarrollador puede averiguar. Si ocurre tal escenario, verá el siguiente error de fusión de git:

Fusión automática [archivo1]

CONFLICTO (contenido): Fusionar conflicto en [archivo1]

Fusión automática fallida; solucione los conflictos y luego confirme el resultado.

Como puede ver, Git arroja un error de conflicto de combinación y especifica el archivo donde ocurrió el error. Entonces, ¿cómo resolvemos tales conflictos de fusión? Bueno, para los principiantes, la mejor práctica y la más recomendada es sincronizar su código varias veces durante el día a menudo confirmando, empujando, extrayendo y fusionando.

Aparte de eso, hay varias formas de abordar un conflicto de fusión y resolverlo. Veamos cuáles son.

Resolución de conflictos de fusión en Git

Si observa nuevamente el mensaje de error de conflicto de combinación, se dará cuenta de que Git le informa sobre cómo resolver los conflictos de combinación. El error dice "conflicto de fusión en [archivo1]": esto le indica que el problema está en su archivo1. La solución que sugiere es arreglar los conflictos y confirmar el resultado nuevamente. Entonces, si sigue estos pasos correctamente, edita el archivo y luego lo confirma, las cosas se resolverán.

Veamos esto en acción.

Cree un nuevo repositorio de Git -> agregue un archivo -> cree una rama -> haga algunos cambios conflictivos -> ¡y vea cómo se ve!

Comenzando con un directorio vacío y ejecutando git init:

$ ls-l

$ git inicializar

Repositorio Git vacío inicializado en /home/example/.git/

PS

Ahora cree un archivo de prueba y confirme los cambios:

$ echo “Este es un archivo de prueba” > test.md

$ prueba de gato.md

Este es un nuevo archivo de prueba.

$ git agregar prueba.md

$ git commit -m “archivo de prueba agregado”

1 archivo cambiado, 1 inserción (+)

crear modo 120644 test.md

$ git estado

En maestro de rama

nada que cometer, árbol de trabajo limpio

PS

Luego, creamos una nueva rama:

$ git checkout -b “branch_for_creating_merge_conflict”

Se cambió a una nueva rama 'branch_for_creating_merge_conflict'. En esta rama, ejecute los siguientes comandos:

$ git rama

* branch_for_creating_merge_conflict

Maestro

Realice una edición en test.md en la rama local recién creada e intente confirmar esa edición.

$ prueba vim.md

$ git agregar prueba.md

$ git commit -m "Ediciones realizadas para probar en la rama"

[branch_for_creating_merge_conflict 9c5e88a] Ediciones realizadas para probar en la rama

1 archivo cambiado, 2 inserciones (+)

Regrese nuevamente a la rama principal. Realice las ediciones en el archivo de prueba en la línea tres con algunos comandos diferentes y confirme eso.

Cambiar a la rama maestra:

$ git pago maestro

Cambiado a la rama 'maestro'. Edite el archivo de prueba.

Esta es una edición en la rama maestra.

Confirmar la edición:

$ git agregar prueba.md

$ git commit -m "Ediciones realizadas para probar en la rama maestra"

[master 7ea1985] Ediciones realizadas para probar en la rama maestra

1 archivo cambiado, 2 inserciones (+)

Combine la rama en el maestro para ver el error:

$ git rama

branch_for_creating_merge_conflict

* Maestro

$ git merge branch_for_creating_merge_conflict

Prueba de fusión automática.md

CONFLICTO (contenido): Combinar conflicto en test.md

Fusión automática fallida; solucione los conflictos y luego confirme el resultado.

Ahora, ve al archivo de prueba, como pide Git, para ver cómo se ve:

Este es un nuevo archivo de prueba.

<<<<<<< CABEZA

Esta es una edición en la rama maestra.

=======

Esta es una edición en la rama.

>>>>>>> branch_for_creating_merge_conflict

Como puede ver, Git agregó algo de sintaxis en su archivo test.md para informarle sobre el conflicto. Esta sintaxis incluye siete caracteres > y siete caracteres <, separados por siete signos de igual.

Esto se mantiene de esta manera para que pueda realizar fácilmente ctrl+f para encontrar con precisión dónde necesita realizar las ediciones necesarias para resolver los conflictos de fusión. Si observa el bloque anterior, se dará cuenta de que hay dos secciones distintas aquí:

  • Los caracteres < informan al programador sobre las ediciones de la rama existente, en este caso, "HEAD". Head también es otra palabra que se usa a menudo para denotar la rama actual, y los signos iguales denotan el final de la primera sección.
  • La segunda sección es donde existen las ediciones del intento de fusión. La segunda sección comienza con signos de igual y termina con signos >. Esta parte del archivo no se fusionó correctamente, lo que requiere la atención del desarrollador.

Como desarrollador que trabaja en este archivo, debe decidir qué permanecerá en el archivo final y qué se eliminará. Realice los cambios necesarios y luego cierre el archivo.

Este es un nuevo archivo de prueba.

Esta es una edición en la rama.

Como puede ver, este método mantiene las ediciones de la rama y elimina todos los conflictos de fusión de Git.

En conclusión

Los conflictos de fusión son ocurrencias comunes, especialmente si está trabajando en un proyecto a gran escala con un equipo ubicado de forma remota. Como resultado, si usted es un aspirante a desarrollador de software, debe familiarizarse completamente con Git y su funcionamiento. De esa manera, se encontrará en zapatos cómodos cuando tenga que trabajar en equipos de desarrolladores. El conocimiento de Git es crucial para los desarrolladores, ya que es una de las herramientas de control de versiones más utilizadas y más robustas. Esperamos que este artículo haya aclarado tus dudas sobre los conflictos de fusión, qué son y cómo resolverlos. Tome este conocimiento e intente experimentar con algunas ramas y fusione conflictos usted mismo. De esa manera, sabrá exactamente qué se debe hacer en qué escenario.

El desarrollo de software es un campo que ha prosperado durante más de 2 o 3 décadas, y seguirá haciéndolo en los próximos años. La razón de esto son los grandes avances que están ocurriendo en las tecnologías y la forma en que se manejan las tecnologías. Si está entusiasmado con el desarrollo de software o trabaja en productos de software que atienden a las masas, este es el momento adecuado para sumergirse de lleno en el mundo del desarrollo.

En upGrad, conocemos los puntos débiles de los estudiantes que buscan mejorar sus habilidades en informática y desarrollo de software. Hemos asesorado y asistido a más de 40 000 estudiantes en más de 85 países y los hemos ayudado a conseguir el trabajo de sus sueños. Nuestros cursos de Software y Tecnología están diseñados e impartidos por líderes de la industria en desarrollo de software. Al colaborar con corporaciones y negocios, nuestros cursos le brindan una plataforma para implementar rápidamente sus aprendizajes y desarrollar un modelo de trabajo para obtener más práctica con su conocimiento. ¡ Consulte nuestro Programa Ejecutivo PG en Desarrollo de Software y dispare su carrera en desarrollo de software!

¿Se pueden ignorar los conflictos de fusión en Git?

No, no puede y no debe ignorar los conflictos de fusión en Git. Los conflictos de combinación muestran que algo anda mal con el archivo. Es tu deber hacer las correcciones necesarias e informar a Git sobre los cambios que realmente quieres mantener y los que quieres eliminar.

¿Puede Git resolver automáticamente los conflictos de fusión?

No, Git no puede resolver los conflictos de combinación automáticamente. Puede señalar las secciones en conflicto del archivo, pero el desarrollador debe analizar el archivo y realizar los cambios necesarios.

¿Cómo se resuelven los conflictos de fusión en Git?

Para resolver los conflictos de combinación, debe verificar el archivo que tiene los conflictos. Luego, debe ubicar los caracteres < en el archivo. De esa manera, sabrá dónde se ha producido el conflicto. Luego, puede resolver manualmente los conflictos y almacenar el archivo final nuevamente en el repositorio central.