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.
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 BAR
y 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/
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