Вы можете, за до запустить операцию git merge
, выбрать именно это, используя опции -X
. Эти параметры 1 позволяют вам выбирать «наше» или «свое» переопределение во время конфликтов низкого уровня (внутри файла), не влияя на объединение не конфликтующих изменений с обеих сторон.
Если вы уже начали слияние и разрешили некоторые конфликты, прерывание слияния и перезапуск с помощью -X ours
или -X theirs
является болезненным. Это также не нужно, поскольку Git предоставляет отдельную команду git merge-file
, которая выполняет трехстороннее объединение для одного набора из трех входных файлов.
Следовательно, предположим, что вы начали объединение, и у него было три конфликта и он прекратился. Если в этот момент вы запустите git status
, вы увидите, что эти три файла не объединены. Итак, вы вручную слили один из трех файлов, начали со второго и затем подумали: Подождите, я бы хотел, чтобы Git сделал это для меня.
Что на этом этапе вы можете остановить ручное разрешение файла рабочего дерева. Выйдите из любого редактора, в котором вы находитесь, обратно в командную строку. Для второго из трех файлов извлеките все три входа:
git show :1:file.ext > file.BASE
git show :2:file.ext > file.OURS
git show :3:file.ext > file.THEIRS
Теперь у вас есть три входа, которые Git попытались и не смогли объединить самостоятельно. Git попытка слияния трех находится в file.ext
; три входа находятся в этих трех файлах с именами .BASE
, .OURS
и .THEIRS
.
Теперь вы можете вызывать git merge-file
и передавать его --ours
или --theirs
, чтобы выбрать наш или их изменения, где есть конфликты:
git merge-file --ours file.OURS file.BASE file.THEIRS
Полученное слияние записывается обратно в file.OURS
. Проверьте его и посмотрите, понравится ли вам результат; если это так, переименуйте его в file.ext
и git add file.ext
, чтобы пометить этот файл как разрешенный. Удалите копии file.BASE
и file.THEIRS
, которые загромождают ваше рабочее дерево.
У вас есть один оставшийся неразрешенным файл. Повторите три команды извлечения и команду git merge-file
для этих трех копий этого оставшегося файла.
(Должна быть ориентированная на пользователя команда Git, которая сделает все это за вас, но нет 't.)
1 Я называю их "расширенными опциями" или "расширенными стратегическими вариантами", чтобы учесть письмо X
. Документация Git просто называет их «вариантами стратегии», что вводит в заблуждение, потому что опция -s
выбирает стратегию и, следовательно, является вариантом стратегии. Таким образом, аргументы -X
являются опциями стратегии, отличными от опции стратегии. (Как говорится, «Очистить как грязь».) Сказать, что -s
является стратегическим вариантом, а -X
предоставляет расширенные параметры, кажется гораздо менее запутанным.