Задіяно 4 файли:
$LOCALФайл на гілці, де ви зливаєтеся; недоторканий процесом злиття, коли вам показано
$REMOTEФайл на гілці, з якої ви зливаєтеся; недоторканий процесом злиття, коли вам показано
$BASEСпільний пращур $ LOCAL і $ REMOTE, тобто. точка, коли дві гілки почали переадресовувати розглянутий файл; недоторканий процесом злиття, коли вам показано
$MERGEDЧастково об'єднаний файл, із конфліктами; це єдиний файл, який торкнувся процес злиття, і він насправді ніколи не показуєтьсяmeld
$MERGEDФайл є той , який містить <<<<<<, >>>>>>, =====(і, може бути, ||||||) маркер (які відмежовують конфлікти). Це файл, який ви редагуєте вручну для виправлення конфліктів.
Ручне редагування конфліктів та візуальне редагування конфліктів проводяться у різних файлах та подаються різні відомості.
При використанні mergetool (припустимо meld), файли, які бачать в ньому є: $LOCAL, $BASE, $REMOTE. Зауважте, що ви не бачите $MERGEDфайл, хоча цей параметр передається як прихований параметр, щоб meldзаписати результат редагування там.
Іншими словами, meldви редагуєте файл посередині, $BASEфайл і вибираєте всі зміни зліва або справа направо вручну . Це чистий файл, який не торкається процес злиття. Єдиний глюк полягає в тому, що при збереженні ви зберігаєте не $BASEфайл, а четвертий прихований параметр meld, тобто $MERGEDфайл (який ви навіть не бачите). $BASEФайл не НЕ містить будь - яких конфліктів чи часткове успішних злиттів , тому що це не $MERGEDфайл .
У візуальному редагуванні, представляючи вам $BASEфайл (замість $MERGEDфайлу), в gitосновному відкидає всі його спроби здійснити злиття (ці спроби видно, якщо ви хочете, у файлі $ MERGED) і дозволяє повністю виконати об'єднання з нуля .
Суть полягає в тому, що в конфліктах в ручному та візуальному злитті ви не дивитесь на одні і ті ж файли, але кінцевий результат записується в той самий файл (тобто $MERGEDфайл).
Ручна корекція конфліктів робиться на $MERGEDтому , що git не має середнього уявити вам три файли, тому він тисне інформацію з трьох файлів ( $LOCAL, $BASE, $REMOTE) в цьому $MERGEDфайлі.
Але візуальні інструменти мають кошти , щоб показати вам три файли: вони показують вам $LOCAL, $BASE, $REMOTEфайли. Ви вибираєте зміни від $LOCALі $REMOTEфайлів , і ви приносите ті в $BASEфайл, повністю заново будувати і навіть перезапис невдалої спроби злиття , що є $MERGEDфайлом.
merge.conflictstyleконфігураціїdiff3замість типовогоmerge.