La respuesta es sí para las combinaciones predeterminadas. Una fusión de tres vías encuentra un ancestro común y luego aplica las diferencias de ambos lados, una operación que no depende del orden. El tema de orden de fusión y conmutatividad generó una discusión fascinante en el git list (si te gusta ese tipo de cosas, eso es). La nota B into C
y C into B
deben ser simétricas, pero no necesariamente se puede decir lo mismo para (B into C) into A
contra B into (C into A)
.
Para elaborar un poco más, basado en el comentario de Vince abajo y el comentario de SEH sobre la cuestión, habrá dos diferencias notables entre B into C
y C into B
, ninguno de los cuales afectan a la resolución de fusión automática se hace referencia en la pregunta.
En primer lugar, la historia será diferente. Los padres de commit de fusión cambiarán según la orden de fusión. Para estos ejemplos, voy a usar "first_branch" y "second_branch", por lo que puedo reservar letras para representar commits.
git checkout first_branch && git merge second_branch
E <- merge commit
|\
| D <- second_branch's tip
| |
| C <- another commit on second_branch
| |
| B <- and another
|/
A <- first_branch's tip before the merge
En este caso, el "primer padre" de E, E^1
, es la punta de first_branch antes de la fusión. second_branch es el "segundo padre" de la confirmación de fusión, también conocido como E^2
. Ahora considere lo contrario:
git checkout second_branch && git merge first_branch
E <- merge commit
|\
| D <- first_branch's tip
| |
| C <- another commit on first_branch
| |
| B <- and another
|/
A <- second_branch's tip before the merge
Los padres están invertidos. E^1
es la sugerencia de second_branch antes de la fusión. E^2
es la punta de first_branch.
En segundo lugar, se invertirá el orden de visualización de los conflictos.En el primer caso, un conflicto podría tener este aspecto:
<<<<<<< HEAD
This line was added from the first_branch branch.
=======
This line was added from the second_branch branch.
>>>>>>> second_branch
En el segundo caso, el mismo conflicto se vería así:
<<<<<<< HEAD
This line was added from the second_branch branch.
=======
This line was added from the first_branch branch.
>>>>>>> first_branch
Ninguna de estas diferencias afectan resolución fusión automática, pero aparecen cuando invierte el orden de fusión de tres vías.
En una nota relacionada, puede encontrar relevante este hilo de tres años de la lista de correo de Git, sobre cómo la fusión de registros de Git es sensible a la "dirección" de la fusión: http: // thread .gmane.org/gmane.comp.version-control.git/127361 – seh