Hay 4 archivos involucrados:
$LOCALEl archivo en la rama donde se está fusionando; intacto por el proceso de fusión cuando se le muestra
$REMOTEEl archivo en la rama desde donde se está fusionando; intacto por el proceso de fusión cuando se le muestra
$BASEEl ancestro común de $ LOCAL y $ REMOTE, es decir. el punto donde las dos ramas comenzaron a desviar el archivo considerado; intacto por el proceso de fusión cuando se le muestra
$MERGEDEl archivo parcialmente fusionado, con conflictos; este es el único archivo tocado por el proceso de fusión y, en realidad, nunca se muestra enmeld
El $MERGEDarchivo es el que contiene las <<<<<<, >>>>>>, =====(y, tal vez, ||||||marcadores) (que entra en conflicto delimitan). Este es el archivo que edita manualmente para corregir conflictos.
La edición manual de conflictos y la edición visual de conflictos se realizan en diferentes archivos y presentan diferentes informaciones.
Cuando se utiliza el mergetool (asumir meld), los archivos que están viendo el mismo son: $LOCAL, $BASE, $REMOTE. Tenga en cuenta que no ve el $MERGEDarchivo, aunque esto se pasa como un parámetro oculto parameld para escribir el resultado de la edición allí.
En otras palabras, en meld, está editando el archivo en el medio, el $BASEarchivo, y selecciona todos los cambios de la izquierda o de la derecha manualmente . Es un archivo limpio, no tocado por el proceso de fusión. La única falla es que, cuando guarda, no guarda en el $BASEarchivo, pero en el cuarto parámetro oculto de meld, ese es el $MERGEDarchivo (que ni siquiera ve). El $BASEarchivo no contiene conflictos ni fusiones parciales exitosas porque no es el $MERGEDarchivo .
En la edición visual, al presentarle el $BASEarchivo (en lugar del $MERGEDarchivo) gitbásicamente descarta todos sus intentos de hacer la fusión (esos intentos son visibles, si lo desea, en el archivo $ MERGED) y le permite hacer la fusión por completo a partir de cero .
La conclusión es que en los conflictos de fusión manual y visual no está mirando los mismos archivos, pero el resultado final está escrito en el mismo archivo (ese es el $MERGEDarchivo).
La corrección manual de los conflictos se realiza en $MERGEDporque git no tiene medio de presentarle tres archivos, por lo que aplasta a la información de los tres archivos ( $LOCAL, $BASE, $REMOTE) en ese $MERGEDarchivo.
Pero las herramientas visuales tienen los medios para mostrarles tres archivos: te muestran los $LOCAL, $BASE, $REMOTEarchivos. Usted va a recoger los cambios de las $LOCALy los $REMOTEarchivos y usted está trayendo a los que en el $BASEarchivo, completamente re-construcción e incluso sobrescribir el fallido intento de fusionar ese es el $MERGEDarchivo.
merge.conflictstyleopción de configuración establecida endiff3lugar de la predeterminadamerge.