Ci sono 4 file coinvolti:
$LOCAL
Il file sul ramo in cui si stanno unendo; non toccato dal processo di unione quando mostrato a te
$REMOTE
Il file sul ramo da cui si sta unendo; non toccato dal processo di unione quando mostrato a te
$BASE
L'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
$MERGED
Il file parzialmente unito, con conflitti; questo è l'unico file toccato dal processo di unione e, in realtà, non ti è mai stato mostratomeld
Il $MERGED
file è 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 $MERGED
file, anche se questo viene passato come parametro nascosto meld
per scrivere lì il risultato della modifica.
In altre parole, in meld
, stai modificando il file nel mezzo, il $BASE
file 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 $BASE
file, ma nel quarto parametro nascosto di meld
, che è il $MERGED
file (che non si vede nemmeno). Il $BASE
file non contiene conflitti o fusioni parziali riuscite perché non è il $MERGED
file .
Nella modifica visiva, quando ti viene presentato il $BASE
file (anziché il $MERGED
file), in git
pratica 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 $MERGED
file).
La correzione manuale dei conflitti viene fatto su $MERGED
perché git
non ha media di presentarvi tre file, in modo che schiaccia le informazioni dai tre file ( $LOCAL
, $BASE
, $REMOTE
) in quel $MERGED
file.
Ma gli strumenti visivi hanno i mezzi per mostrare tre file: vi mostrano i $LOCAL
, $BASE
, $REMOTE
i file. Si sta raccogliendo i cambiamenti dai $LOCAL
e $REMOTE
file e si stanno portando quelle nel $BASE
file completamente ri-costruzione e anche sovrascrivendo il fallito tentativo di fondere cioè il $MERGED
file.
merge.conflictstyle
opzione di configurazione impostata sudiff3
anziché quella predefinitamerge
.