Hay 4 archivos involucrados:
$LOCAL
El archivo en la rama donde se está fusionando; intacto por el proceso de fusión cuando se le muestra
$REMOTE
El archivo en la rama desde donde se está fusionando; intacto por el proceso de fusión cuando se le muestra
$BASE
El 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
$MERGED
El 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 $MERGED
archivo 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 $MERGED
archivo, 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 $BASE
archivo, 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 $BASE
archivo, pero en el cuarto parámetro oculto de meld
, ese es el $MERGED
archivo (que ni siquiera ve). El $BASE
archivo no contiene conflictos ni fusiones parciales exitosas porque no es el $MERGED
archivo .
En la edición visual, al presentarle el $BASE
archivo (en lugar del $MERGED
archivo) git
bá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 $MERGED
archivo).
La corrección manual de los conflictos se realiza en $MERGED
porque 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 $MERGED
archivo.
Pero las herramientas visuales tienen los medios para mostrarles tres archivos: te muestran los $LOCAL
, $BASE
, $REMOTE
archivos. Usted va a recoger los cambios de las $LOCAL
y los $REMOTE
archivos y usted está trayendo a los que en el $BASE
archivo, completamente re-construcción e incluso sobrescribir el fallido intento de fusionar ese es el $MERGED
archivo.
merge.conflictstyle
opción de configuración establecida endiff3
lugar de la predeterminadamerge
.