Git dice “Falló la combinación automática”, ¿qué significa?

4 minutos de lectura

avatar de usuario de abdulla farhoud
abdulla farhoud

Traté de fusionar dos ramas y esto es lo que hice y lo que sucedió:

Abdulla (Master) new-git-project1
$ git merge sidebar
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.
Abdulla (Master *+|MERGING) new-git-project1
$ git merge sidebar
error: Merging is not possible because you have unmerged files.
hint: Fix them up in the work tree, and then use 'git add/rm <file>'
hint: as appropriate to mark resolution and make a commit.
fatal: Exiting because of an unresolved conflict.

Soy nuevo en esto, así que puedo obtener respuestas simples.

  • Posible duplicado de ¿Cómo resolver conflictos de fusión en Git?

    – Doctor

    31 de marzo de 2018 a las 18:19

  • Después de fusionar manualmente, finalice la fusión git merge --continue. a través de

    – caquio

    12 oct 2022 a las 8:53


avatar de usuario de jsageryd
jsageryd

Ha encontrado un conflicto de fusión. Significa que Git no puede determinar automáticamente cómo fusionar las dos ramas. Git te pide que hagas la fusión manualmente y te brinda ayuda en el camino al decirte qué archivos no puede fusionar automáticamente y qué cambios específicamente en estos archivos tienen problemas.

Correr git status. Mostrará una lista de los archivos que no se fusionaron. Estos archivos contendrán marcadores de conflicto que se parecen a esto:

foo

<<<<<<< HEAD
BAR
=======
bar baz
>>>>>>> foo

qux

Esto significa que HEAD (o la confirmación o rama en la que se encuentra actualmente) ha cambiado una línea a BARy la rama foo ha cambiado la misma línea a bar baz.

Edite cada uno de estos conflictos a su gusto, asegurándose de que no le queden más marcadores de conflicto. Por ejemplo, si prefería la BAR versión en el ejemplo anterior, simplemente editaría el archivo para que se viera así:

foo

BAR

qux

Guarde cada archivo y agréguelo sobre la marcha.

# (edit <file>)
git add <file>

Hay herramientas disponibles que hacen la parte de edición de archivos por usted, algunas las encuentran más fáciles de usar que editar los archivos manualmente.

Cuando haya terminado, ejecute git status para asegurarse de que no tiene más archivos sin fusionar. Entonces corre git commit para finalizar la fusión si está satisfecho con el resultado.

Git – Ramificación y fusión básicas proporciona más información sobre los conflictos de fusión.


Una forma diferente y, a menudo, más sensata de hacer esto es reorganizar primero la otra rama (en este caso sidebar) en la parte superior de la rama en la que lo está fusionando (en este caso master):

git checkout sidebar
git rebase master

Es probable que aún tenga conflictos, pero solucionarlos aquí a veces es más fácil. El procedimiento es el mismo que el descrito anteriormente, edite los archivos, agréguelos, confirme. Cuando haya terminado, ejecute git rebase --continue para continuar con el procedimiento de rebase.

Luego, finalmente puedes fusionar la rama sin conflictos:

git checkout master
git merge --no-ff sidebar

El --no-ff es opcional; con él obtendrá una confirmación de fusión para indicar que fusionó una rama, sin ella, su historial será lineal sin confirmación de fusión.

Una ventaja de reorganizar antes de fusionar es que nunca habrá conflictos de fusión en la fusión real, lo que significa que la confirmación de fusión nunca introduce un cambio que no sea el ya introducido por las confirmaciones en la rama que se está fusionando. Esto hace que la historia sea más fácil de entender.

Una desventaja del cambio de base es que las confirmaciones se aplican sobre un nuevo estado del código. Esto tiene la implicación de que debe verificar cada compromiso para ver que todavía hace lo correcto. Es una buena idea dedicar un poco de tiempo a hacer esto para evitar futuras sorpresas.

*
Evite o al menos tenga cuidado al cambiar la base de las ramas que tienen fusiones. Rebase come fusiones. También es una buena idea evitar cambiar la base de las confirmaciones de otra persona. El autor de un cambio suele ser la persona que mejor sabe cómo resolver adecuadamente cualquier conflicto de fusión causado, por lo que, si es posible, es mejor delegar la resolución de conflictos.

Este mensaje significa que hay algunos cambios en index.html en ambas ramas que no son idénticos. Así que hay conflictos de fusión. Por lo tanto, debe resolver estos conflictos utilizando una herramienta de combinación como meld. Aquí debe decidir qué cambios debe mantener en esta rama. Después de resolver estos conflictos, debe confirmar sus cambios locales y luego enviarlos al repositorio remoto de git. Puede consultar el siguiente enlace para resolver los conflictos.
https://help.github.com/articles/resolver-a-merge-conflict-using-the-command-line/

¿Ha sido útil esta solución?