Как я могу увидеть "трехстороннее различие" для конфликта слияния Git?

Предположим, я нахожусь на ветке Git master и я git merge featurebranch, Существует конфликт в foo.html,

Когда я открою foo.htmlЯ вижу, в зоне конфликта, что master есть и что featurebranch есть. Но я не могу сказать, какие изменения были сделаны на master что противоречило featurebranch; Я знаю только то, что сейчас есть у мастера.

Я хотел бы видеть различия, которые каждый применил.

Или, чтобы получить ту же информацию, я мог видеть:

  • Версия master сейчас
  • Версия featurebranch сейчас
  • Версия, которую имел их общий предок

Как я могу это увидеть?

2 ответа

Решение

Из git-merge (1),

Альтернативный стиль можно использовать, установив переменную конфигурации "merge.conflictstyle" в "diff3".

В добавок к <<<<<<<, =======, а также >>>>>>> маркеры, он использует другой ||||||| маркер, за которым следует исходный текст. Вы можете сказать, что оригинал только что констатировал факт, и ваша сторона просто подчинилась этому заявлению и сдалась, в то время как другая сторона пыталась иметь более позитивный настрой. Иногда вы можете придумать лучшее разрешение, просмотрев оригинал.

Это может быть включено с помощью

$ git config --global merge.conflictstyle diff3

Многие инструменты различий / слияния в графическом интерфейсе имеют вид слияния в 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,

Другие вопросы по тегам