git mergetool не выполняет трехстороннее слияние

Я начал использовать смесь в качестве своего merge.tool, Пока все работает нормально, но у меня сегодня проблема с тройным слиянием.

В файле MyBranch.txt я добавил код ME:

A
B
ME
D
E

Тем временем мастер добавил код THEM_1 а также THEM_2, я бегу git rebase master, Это то, что файл file.txt смотрит, когда rebase делает паузу:

  A
  THEM_1
  B
<<<<<<< HEAD
  ME
||||||| merged common ancestors
=======
  THEM_2
>>>>>>> My patch name
  D
  E

THEM_2 должен предшествовать ME в слиянии, поэтому очевидное слияние

A
THEM_1
B
THEM_2
ME
D
E

Но когда я бегу git mergetool который открывает смесь, ни одна из трех версий не имеет THEM_1, Что дает?

1 ответ

Я просто пытался воспроизвести вашу ситуацию.

Если я сделаю git checkout me; git merge theirs; git mergetool -t meldЯ получаю следующее:

local | merge | remote
------+-------+-------
A     | A     | A
B     | B     | THEM_1
ME    | D     | B
D     | E     | THEM_2
E     |       | D
      |       | E

(Это в точности содержимое двух ветвей и общий родительский элемент посередине.)

Если я сделаю git checkout me; git rebase theirs; git mergetool -t meldЯ получаю то же самое с локальным и удаленным обменом.

В обоих случаях вы можете добавить THEM_1, просто нажав. Для конфликта в ME/THEM_2, вы можете добавить одну сторону одним щелчком мыши, но нужно добавить другую вручную в средней рамке.

Посмотри на kdiff3 это гораздо более хороший инструмент для решения конфликтов слияния.

Имейте в виду, что перебазирование с конфликтами имеет тенденцию быть сложным, если нужно перебазировать несколько коммитов.

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