git-mergetool
Имя
git-mergetool — запуск средств разрешения конфликтов слияния для устранения конфликтов слияния
Краткое описание
git mergetool [--tool=<tool>] [-y | --[no-]prompt] [<file>…]
Описание
Используйте git mergetool, чтобы запустить одну из нескольких утилит слияния для устранения конфликтов слияния. Обычно команда запускается после git merge.
Если указаны один или несколько параметров <file>, программа слияния будет запущена для устранения различий в каждом файле (пропуская файлы без конфликтов). При указании каталога будут включены все неразрешённые файлы в этом пути. Если имена <file> не указаны, git mergetool запустит программу слияния для каждого файла с конфликтами слияния.
Параметры
-
-t<tool> -
--tool=<tool> -
Используйте программу разрешения слияния, указанную в
<tool>. Допустимые значения:emerge,gvimdiff,kdiff3,meld,vimdiffиtortoisemerge. Выполнитеgitmergetool--tool-help, чтобы получить список допустимых значений параметров<tool>.Если программа разрешения слияния не указана,
gitmergetoolиспользует переменную конфигурацииmerge.tool. Если переменная конфигурацииmerge.toolне задана,gitmergetoolвыберет подходящее значение по умолчанию.Можно явно указать полный путь к инструменту, задав переменную конфигурации
mergetool.<tool>.path. Например, можно настроить абсолютный путь к kdiff3, задавmergetool.kdiff3.path. В противном случаеgitmergetoolпредполагает, что инструмент доступен в$PATH.Вместо запуска одной из известных программ слияния
gitmergetoolможно настроить на запуск альтернативной программы, указав командную строку для её вызова в переменной конфигурацииmergetool.<tool>.cmd.При вызове
gitmergetoolс этим инструментом (через параметр-tили--toolлибо переменную конфигурацииmerge.tool) настроенная командная строка будет вызвана с переменнойBASE, содержащей имя временного файла с общей базой для слияния, если она доступна; переменнойLOCAL, содержащей имя временного файла с содержимым файла в текущей ветке; переменнойREMOTE, содержащей имя временного файла с содержимым объединяемого файла; и переменнойMERGED, содержащей имя файла, в который инструмент слияния должен записать результат разрешения конфликта.Если пользовательский инструмент слияния корректно сообщает об успешном разрешении конфликта своим кодом завершения, переменной конфигурации
mergetool.<tool>.trustExitCodeможно присвоить значениеtrue. В противном случаеgitmergetoolпредложит пользователю подтвердить успешное разрешение после завершения пользовательского инструмента. -
--tool-help -
Вывести список инструментов слияния, которые можно использовать с
--tool. -
-y -
--no-prompt -
Не запрашивать подтверждение перед каждым вызовом программы разрешения слияния. Это поведение используется по умолчанию, если программа разрешения слияния явно указана с помощью параметра
--toolили переменной конфигурацииmerge.tool. -
--prompt -
Запрашивать подтверждение перед каждым вызовом программы разрешения слияния, чтобы пользователь мог пропустить путь.
-
-g -
--gui -
Если
git-mergetoolвызвана с параметром-gили--gui, инструмент слияния по умолчанию будет выбран из настроенной переменнойmerge.guitool, а не изmerge.tool. Еслиmerge.guitoolне задана, будет использован инструмент, настроенный вmerge.tool. Его можно выбрать автоматически с помощью переменной конфигурацииmergetool.guiDefault. -
--no-gui -
Этот параметр отменяет ранее заданный параметр
-gили--guiлибо конфигурациюmergetool.guiDefaultи считывает инструмент слияния по умолчанию из настроенной переменнойmerge.tool. -
-O<orderfile> -
Обрабатывать файлы в порядке, указанном в
<orderfile>, где в каждой строке задан один шаблон glob оболочки. Этот параметр переопределяет переменную конфигурацииdiff.orderFile(см. git-config[1]). Чтобы отменитьdiff.orderFile, используйте-O/dev/null.
Конфигурация
Всё содержимое этой секции ниже данной строки выборочно включено из документации git-config[1]. Оно совпадает с тем, что приведено там:
-
mergetool.<tool>.path -
Переопределить путь для указанного инструмента. Это полезно, если инструмент не находится в
$PATH. -
mergetool.<tool>.cmd -
Указать команду для вызова указанного инструмента слияния. Указанная команда выполняется в оболочке, где доступны следующие переменные:
BASE— имя временного файла с общей базой объединяемых файлов, если она доступна;LOCAL— имя временного файла с содержимым файла в текущей ветке;REMOTE— имя временного файла с содержимым файла из объединяемой ветки;MERGEDсодержит имя файла, в который инструмент слияния должен записать результат успешного слияния. -
mergetool.<tool>.hideResolved -
Позволяет переопределить глобальное значение
mergetool.hideResolvedдля конкретного инструмента. Полное описание см. вmergetool.hideResolved. -
mergetool.<tool>.trustExitCode -
Для пользовательской команды слияния указать, можно ли использовать её код завершения, чтобы определить успешность слияния. Если этому параметру не присвоено значение true, проверяется временная метка целевого файла слияния. Слияние считается успешным, если файл был обновлён; в противном случае пользователю предлагается подтвердить успешность слияния.
-
mergetool.meld.hasOutput -
Старые версии
meldне поддерживают параметр--output. Git попытается определить, поддерживает лиmeldпараметр--output, проверив результат выполненияmeld--help. Настройкаmergetool.meld.hasOutputпозволит Git пропустить эти проверки и использовать заданное значение. Если присвоитьmergetool.meld.hasOutputзначениеtrue, Git будет безусловно использовать параметр--output, а значениеfalseисключает использование--output. -
mergetool.meld.useAutoMerge -
Если указан параметр
--auto-merge, meld автоматически объединит все части без конфликтов, выделит конфликтующие части и будет ждать решения пользователя. Если присвоитьmergetool.meld.useAutoMergeзначениеtrue, Git будет безусловно использовать параметр--auto-mergeвместе сmeld. При значенииautoGit определит, поддерживается ли--auto-merge, и будет использовать--auto-mergeтолько при наличии такой поддержки. Значениеfalseполностью исключает использование--auto-mergeи является значением по умолчанию. -
mergetool.<variant>.layout -
Настроить расположение разделённых окон для
<variant>vimdiff, которое может быть одним из следующих:vimdiff,nvimdiff,gvimdiff. При запускеgitmergetoolс--tool=<variant> (или без--tool, еслиmerge.toolнастроен как<variant>) Git проверитmergetool.<variant>.layout, чтобы определить расположение окон инструмента. Если конфигурация для конкретного варианта недоступна, в качестве запасного варианта используется значение ' s изvimdiff. Если и оно недоступно, будет использовано расположение по умолчанию с 4 окнами. О настройке расположения см. в разделеBACKEND SPECIFIC HINTS. -
mergetool.hideResolved -
Во время слияния Git автоматически разрешает максимально возможное количество конфликтов и записывает файл
$MERGED, помещая маркеры конфликта вокруг тех конфликтов, которые ему не удалось разрешить;$LOCALи$REMOTEобычно содержат версии файла до разрешения конфликтов Git. Этот флаг перезаписывает$LOCALи$REMOTE, чтобы инструменту слияния передавались только неразрешённые конфликты. Можно настроить отдельно для каждого инструмента с помощью переменной конфигурацииmergetool.<tool>.hideResolved. По умолчанию установлено значениеfalse. -
mergetool.keepBackup -
После выполнения слияния исходный файл с маркерами конфликтов можно сохранить в файле с расширением
.orig. Если этой переменной присвоено значениеfalse, этот файл не сохраняется. По умолчанию установлено значениеtrue(то есть резервные файлы сохраняются). -
mergetool.keepTemporaries -
При вызове пользовательского инструмента слияния Git использует набор временных файлов, передаваемых инструменту. Если инструмент возвращает ошибку и этой переменной присвоено значение
true, временные файлы сохраняются; в противном случае они удаляются после завершения работы инструмента. По умолчанию установлено значениеfalse. -
mergetool.writeToTemp -
По умолчанию Git записывает временные версии
BASE,LOCALиREMOTEконфликтующих файлов в рабочем дереве. Если задано значениеtrue, Git попытается использовать для этих файлов временный каталог. По умолчанию установлено значениеfalse. -
mergetool.prompt -
Запрашивать подтверждение перед каждым вызовом программы разрешения слияния.
-
mergetool.guiDefault -
Задайте
true, чтобы по умолчанию использоватьmerge.guitool(эквивалентно указанию аргумента--gui), илиauto, чтобы выбиратьmerge.guitoolилиmerge.toolв зависимости от наличия значения переменной окруженияDISPLAY. По умолчанию установлено значениеfalse; для использования--guiнеобходимо явно указать аргументmerge.guitool.
Временные файлы
git mergetool создаёт резервные файлы *.orig при разрешении слияний. Их можно безопасно удалить после слияния файла и завершения сеанса git mergetool.
Если присвоить переменной конфигурации mergetool.keepBackup значение false, git mergetool будет автоматически удалять резервные файлы после успешного слияния файлов.
Особенности отдельных серверных модулей
vimdiff
Описание
Если указать --tool=vimdiff в git mergetool, Git откроет Vim с расположением из 4 окон, распределённых следующим образом:
------------------------------------------ | | | | | LOCAL | BASE | REMOTE | | | | | ------------------------------------------ | | | MERGED | | | ------------------------------------------
LOCAL, BASE и REMOTE — это буферы только для чтения, отображающие содержимое конфликтующего файла в определённых коммитах («коммит, в который выполняется слияние», «коммит общего предка» и «коммит, из которого выполняется слияние» соответственно).
MERGED — доступный для записи буфер, в котором нужно разрешить конфликты (используя остальные буферы только для чтения в качестве справки). Закончив работу, сохраните изменения и выйдите из Vim обычным способом (:wq) или, чтобы отменить операцию, выйдите с помощью :cq.
Настройка расположения
Можно изменить расположение окон Vim, задав переменную конфигурации mergetool.vimdiff.layout, которая принимает строку со следующими разделителями, имеющими специальное значение:
-
+используется для «открытия новой вкладки» -
,используется для «открытия нового вертикального разделения» -
/используется для «открытия нового горизонтального разделения» -
@обозначает файл, содержащий окончательную версию после разрешения конфликтов. Если он не указан, по умолчанию будет использоватьсяMERGED.
Приоритет операторов (его можно изменить с помощью скобок) следующий:
`@` > `+` > `/` > `,`
Рассмотрим несколько примеров, чтобы понять, как это работает:
-
layout="(LOCAL,BASE,REMOTE)/MERGED"Это в точности то же расположение по умолчанию, которое мы уже рассмотрели.
Обратите внимание, что
/имеет более высокий приоритет, чем,, поэтому в данном случае скобки не нужны. Следующее определение расположения эквивалентно:layout = "LOCAL,BASE,REMOTE / MERGED"
-
layout="LOCAL,MERGED,REMOTE"Если по какой-либо причине нас не интересует буфер
BASE.------------------------------------------ | | | | | | | | | LOCAL | MERGED | REMOTE | | | | | | | | | ------------------------------------------
-
layout="MERGED"Будет показан только буфер
MERGED. Однако обратите внимание, что все остальные буферы по-прежнему загружены в vim, и к ним можно обратиться командой «buffers».------------------------------------------ | | | | | MERGED | | | | | ------------------------------------------
-
layout="@LOCAL,REMOTE"Если в расположении отсутствует
MERGED, необходимо «пометить» один из буферов символом @ (@). Он станет буфером, который нужно редактировать и сохранять после разрешения конфликтов.------------------------------------------ | | | | | | | | | | LOCAL | REMOTE | | | | | | | | | | ------------------------------------------
-
layout="LOCAL,BASE,REMOTE/MERGED+BASE,LOCAL+BASE,REMOTE"Откроются три вкладки: первая будет копией расположения по умолчанию, а в остальных двух будут показаны только различия между (
BASEиLOCAL) и (BASEиREMOTE) соответственно.------------------------------------------ | <TAB #1> | TAB #2 | TAB #3 | | ------------------------------------------ | | | | | LOCAL | BASE | REMOTE | | | | | ------------------------------------------ | | | MERGED | | | ------------------------------------------
------------------------------------------ | TAB #1 | <TAB #2> | TAB #3 | | ------------------------------------------ | | | | | | | | | | BASE | LOCAL | | | | | | | | | | ------------------------------------------
------------------------------------------ | TAB #1 | TAB #2 | <TAB #3> | | ------------------------------------------ | | | | | | | | | | BASE | REMOTE | | | | | | | | | | ------------------------------------------
-
layout="LOCAL,BASE,REMOTE/MERGED+BASE,LOCAL+BASE,REMOTE+(LOCAL/BASE/REMOTE),MERGED"Как и в предыдущем примере, но добавляется четвёртая вкладка с той же информацией, что и на первой, но с другим расположением.
--------------------------------------------- | TAB #1 | TAB #2 | TAB #3 | <TAB #4> | --------------------------------------------- | LOCAL | | |---------------------| | | BASE | MERGED | |---------------------| | | REMOTE | | ---------------------------------------------
Обратите внимание: в определении третьей вкладки необходимо использовать скобки, чтобы
,имел более высокий приоритет, чем/.
Варианты
Вместо --tool=vimdiff можно использовать один из следующих вариантов:
-
--tool=gvimdiff, чтобы открыть gVim вместо Vim. -
--tool=nvimdiff, чтобы открыть Neovim вместо Vim.
При использовании этих вариантов для указания пользовательского расположения нужно задать переменные конфигурации mergetool.gvimdiff.layout и mergetool.nvimdiff.layout вместо mergetool.vimdiff.layout (хотя последнее будет использоваться как запасной вариант, если настройка для конкретного варианта не задана).
Кроме того, для обратной совместимости с предыдущими версиями Git к 1, 2 или 3 можно добавить vimdiff или любой из вариантов (например, vimdiff3, nvimdiff1 и т. д.), чтобы использовать предопределённое расположение. Иными словами, использование --tool=[g|n]vimdiff<x> эквивалентно использованию --tool=[g|n]vimdiff и заданию переменной конфигурации mergetool.[g|n]vimdiff.layout значения…
-
<x>
=1:"@LOCAL,REMOTE" -
<x>
=2:"LOCAL,MERGED,REMOTE" -
<x>
=3:"MERGED"
Пример: использование --tool=gvimdiff2 откроет gvim с тремя столбцами (LOCAL, MERGED и REMOTE).
mergetool
© 2005–2026 Linus Torvalds and others
Licensed under the GNU General Public License version 2.
https://git-scm.com/docs/git-mergetool