Русский ▾ Topics ▾ Latest version ▾ git-merge-file last updated in 2.54.0

НАЗВАНИЕ

git-merge-file — выполнить трёхходовое слияние файлов

ОБЗОР

git merge-file [-L <имя-текущего> [-L <имя-основы> [-L <имя-другого>]]]
	[--ours|--theirs|--union] [-p|--stdout] [-q|--quiet] [--marker-size=<число>]
	[--[no-]diff3] [--object-id] <текущий> <основа> <другой>

ОПИСАНИЕ

При наличии трёх файлов <текущий>, <основа> и <другой>, git merge-file включает все изменения, которые ведут от <основы> к <другому>, в <текущий>. Результат обычно помещается в <текущий>. git merge-file полезен для объединения отдельных изменений в оригинале. Предположим, <основа> — это оригинал, а <текущий> и <другой> — это модификации <основы>, тогда git merge-file объединяет оба изменения.

Конфликт возникает, если и <текущий>, и <другой> имеют изменения в общем сегменте строк. Если конфликт обнаружен, git merge-file обычно выводит предупреждение и заключает конфликт в строки, содержащие маркеры <<<<<<< и >>>>>>>. Типичный конфликт будет выглядеть так:

<<<<<<< A
строки в файле A
=======
строки в файле B
>>>>>>> B

Если есть конфликты, пользователь должен отредактировать результат и удалить одну из альтернатив. Однако, когда действует параметр --ours, --theirs или --union, эти конфликты разрешаются в пользу строк из <текущего>, строк из <другого> или строк из обоих соответственно. Длину маркеров конфликта можно задать с помощью параметра --marker-size.

Если указан --object-id, происходит точно такое же поведение, за исключением того, что вместо указания того, что сливать, как файлы, оно указывается как список идентификаторов объектов, ссылающихся на blob-объекты.

Значение выхода этой программы отрицательно при ошибке и равно количеству конфликтов в противном случае (усекается до 127, если конфликтов больше). Если слияние было чистым, значение выхода равно 0.

git merge-file разработан как минимальный клон RCS merge; то есть он реализует всю функциональность RCS merge, которая необходима git[1].

ПАРАМЕТРЫ

--object-id

Указывает содержимое для слияния как blob-объекты в текущем репозитории вместо файлов. В этом случае операция должна выполняться в допустимом репозитории.

Если указан параметр -p, слитый файл (включая конфликты, если они есть) идёт в стандартный вывод как обычно; в противном случае слитый файл записывается в хранилище объектов, а идентификатор объекта его blob-объекта записывается в стандартный вывод.

-L <метка>

Этот параметр может быть указан до трёх раз и задаёт метки для использования вместо соответствующих имён файлов в отчётах о конфликтах. То есть git merge-file -L x -L y -L z a b c генерирует вывод, который выглядит так, как будто он получен из файлов x, y и z вместо файлов a, b и c.

-p

Отправлять результаты в стандартный вывод вместо перезаписи <текущего>.

-q

Тихий режим; не предупреждать о конфликтах.

--diff3

Показывать конфликты в стиле «diff3».

--zdiff3

Показывать конфликты в стиле «zdiff3».

Параметры --diff3 и --zdiff3 по умолчанию используют значение переменной конфигурации merge.conflictStyle (см. git-config[1]).

--ours
--theirs
--union

Вместо того чтобы оставлять конфликты в файле, разрешать конфликты в пользу нашей (или их, или обеих) стороны строк.

--diff-algorithm={patience|minimal|histogram|myers}

Использовать другой алгоритм сравнения при слиянии. Текущий алгоритм по умолчанию — «myers», но выбор более позднего алгоритма, такого как «histogram», может помочь избежать неправильных слияний, возникающих из-за неважных совпадающих строк (например, скобок из разных функций). См. также git-diff[1] --diff-algorithm.

ПРИМЕРЫ

git merge-file README.my README README.upstream

объединяет изменения README.my и README.upstream начиная с README, пытается слить их и записывает результат в README.my.

git merge-file -L a -L b -L c tmp/a123 tmp/b234 tmp/c345

сливает tmp/a123 и tmp/c345 с основой tmp/b234, но использует метки a и c вместо tmp/a123 и tmp/c345.

git merge-file -p --object-id abc1234 def567 890abcd

объединяет изменения blob-объекта abc1234 и 890abcd начиная с def567, пытается слить их и записывает результат в стандартный вывод

GIT

Является частью пакета git[1]