Как я могу увидеть "трехсторонний diff" для конфликта Git слияния?
Предположим, что я нахожусь на ветке Git master
и я git merge featurebranch
. В foo.html
есть конфликт.
Когда я открываю foo.html
, я вижу, в области конфликта, что master
имеет и что featurebranch
. Но я не могу сказать , какое изменение было сделано на master
, которое противоречило featurebranch
; Я знаю только, что мастер имеет сейчас.
Я хотел бы видеть diff, который каждый из них применял.
Или, чтобы получить ту же информацию, я мог видеть:
- Теперь версия
master
- Теперь версия
featurebranch
- Версия их общий предок имела
Как я могу это увидеть?
Ответы
Ответ 1
От git -merge (1),
Альтернативный стиль можно использовать, установив переменную конфигурации "merge.conflictstyle" в "diff3".
В дополнение к маркерам <<<<<<<
, =======
и >>>>>>>
он использует другой маркер |||||||
, за которым следует исходный текст. Вы можете сказать, что оригинал только что заявил факт, и ваша сторона просто согласилась с этим выражением и сдалась, в то время как другая сторона попыталась более позитивно относиться. Иногда вы можете получить лучшее разрешение, просмотрев оригинал.
Это можно активировать с помощью
$ git config --global merge.conflictstyle diff3
Ответ 2
Многие инструменты для разграничения/слияния GUI имеют вид слияния с 3 или 4 способами. Я настоятельно рекомендую Beyond Compare для разрешения конфликтов слияния. Другой (хорошо) инструмент DiffMerge.
Вы можете настроить собственный mergetool для использования с командой git mergetool
. Это моя конфигурация .gitconfig
для Beyond Compare (Pro edition) и DiffMerge на моей машине Windows с использованием msysgit:
[merge]
tool = bc3
[diff]
tool = bc3
[difftool "dm"]
cmd = C:/Program\\ Files/SourceGear/Common/DiffMerge/sgdm.exe \"$LOCAL\" \"$REMOTE\"
[difftool "bc3"]
cmd = "\"c:/program files (x86)/beyond compare 3/bcomp.exe\" \"$LOCAL\" \"$REMOTE\""
[mergetool "bc3"]
cmd = "\"c:/program files (x86)/beyond compare 3/bcomp.exe\" \"$LOCAL\" \"$REMOTE\" \"$BASE\" \"$MERGED\""
Вы можете узнать больше о различных конфигурациях инструментов diff/merge в официальном документе Linux Kernel Git для git config
.