Ci sono 4 file coinvolti:
$LOCALIl file sul ramo in cui si stanno unendo; non toccato dal processo di unione quando mostrato a te
$REMOTEIl file sul ramo da cui si sta unendo; non toccato dal processo di unione quando mostrato a te
$BASEL'antenato comune di $ LOCAL e $ REMOTE, ad es. il punto in cui i due rami hanno iniziato a deviare il file considerato; non toccato dal processo di unione quando mostrato a te
$MERGEDIl file parzialmente unito, con conflitti; questo è l'unico file toccato dal processo di unione e, in realtà, non ti è mai stato mostratomeld
Il $MERGEDfile è quello che contiene i <<<<<<, >>>>>>, =====(e, forse, ||||||i marcatori) (che è in conflitto delimitano). Questo è il file che si modifica manualmente per correggere i conflitti.
La modifica manuale dei conflitti e la modifica dei conflitti visivi vengono eseguite su file diversi e presentano informazioni diverse.
Quando si utilizza il mergetool (assumere meld), i file che stanno vedendo in essa sono: $LOCAL, $BASE, $REMOTE. Nota che non vedi il $MERGEDfile, anche se questo viene passato come parametro nascosto meldper scrivere lì il risultato della modifica.
In altre parole, in meld, stai modificando il file nel mezzo, il $BASEfile e scegli manualmente tutte le modifiche da sinistra o da destra . È un file pulito, non toccato dal processo di unione. L'unico inconveniente è che, quando si salva, non si salva nel $BASEfile, ma nel quarto parametro nascosto di meld, che è il $MERGEDfile (che non si vede nemmeno). Il $BASEfile non contiene conflitti o fusioni parziali riuscite perché non è il $MERGEDfile .
Nella modifica visiva, quando ti viene presentato il $BASEfile (anziché il $MERGEDfile), in gitpratica viene scartato tutti i suoi tentativi di eseguire l'unione (tali tentativi sono visibili, se lo desideri, nel file $ MERGED) e ti consente di eseguire completamente l'unione da zero .
La linea di fondo è che nei conflitti di fusione manuale e visiva non si osservano gli stessi file, ma il risultato finale viene scritto nello stesso file (che è il $MERGEDfile).
La correzione manuale dei conflitti viene fatto su $MERGEDperché git non ha media di presentarvi tre file, in modo che schiaccia le informazioni dai tre file ( $LOCAL, $BASE, $REMOTE) in quel $MERGEDfile.
Ma gli strumenti visivi hanno i mezzi per mostrare tre file: vi mostrano i $LOCAL, $BASE, $REMOTEi file. Si sta raccogliendo i cambiamenti dai $LOCALe $REMOTEfile e si stanno portando quelle nel $BASEfile completamente ri-costruzione e anche sovrascrivendo il fallito tentativo di fondere cioè il $MERGEDfile.
merge.conflictstyleopzione di configurazione impostata sudiff3anziché quella predefinitamerge.