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