Здесь задействованы 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) и позволяет вам < em> полностью выполнить слияние с нуля.
Суть в том, что в конфликтах ручного и визуального слияния вы не просматриваете одни и те же файлы, а конечный результат записывается в один и тот же файл (это файл $MERGED
).
Ручное исправление конфликтов выполняется $MERGED
, потому что git
не имеет возможности представить вам три файла, поэтому он сжимает информацию из трех файлов ($LOCAL
, $BASE
, $REMOTE
) в этом $MERGED
файле.
Но у визуальных инструментов есть средства, чтобы показать вам три файла: они показывают вам файлы $LOCAL
, $BASE
, $REMOTE
. Вы выбираете изменения из файлов $LOCAL
и $REMOTE
и вносите их в файл $BASE
, полностью перестраивая и даже перезаписывая неудачную попытку слияния, то есть файл $MERGED
.
person
user1284631
schedule
02.08.2013