Я пытаюсь выполнить 3-х стороннее слияние для фиксации, выбранной из вишни, используя Meld. Однако мне трудно понять направления, в которых текут изменения между 3 файлами, показанными Meld. Для лучшей иллюстрации рассмотрим следующий случай:
В главной ветке при фиксации 4e623e0 у нас есть отслеживаемый файл с именем test. c, и он выглядит так:
#include <stdio.h>
int main()
{
printf("Hello world!\n");
return 0;
}
Мы создаем ветку 'other' и фиксируем изменения в test. c, поэтому ветка other находится на фиксации 29771b0, а файл test. c выглядит так:
#include <stdio.h>
#include "foo.h"
#include "headerx.h"
#include "headery.h"
#include "headerz.h"
int main()
{
printf("Hello world!\n");
if (x(2) > x(3))
return -1;
else if (z(2) > z(3))
return 44;
return 0;
}
Теперь мы go возвращаемся к ветке 'master' и фиксируем изменения для test. c, поэтому мастер ветки находится на фиксации 02fd8c8, а файл test. c выглядит так:
include <stdio.h>
#include "foo.h"
#include "bar.h"
int main()
{
printf("Hello world!\n");
return bar_fun(2);
}
Наконец, в основной ветке мы пытаемся выполнить
git cherry-pick 29771b0
git mergetool
, и появляется следующее окно: ![enter image description here](https://i.stack.imgur.com/fK8U6.png)
Мой вопрос:
- Какой смысл имеет отмеченная стрелка, указывающая на «ЛОКАЛЬНЫЙ» файл?
- Как я могу отключить эту «функцию» (ошибка?)? Это довольно неприятно при слиянии больших файлов, когда Meld помечает большой блок кода "BASE" и хочет sh поместить его в файл "LOCAL".
- Если это имеет смысл - зачем Хочу поменять, "ЛОКАЛЬНЫЙ" файл? Согласно этому сообщению SO: Какая версия файла git будет окончательно использована: LOCAL, BASE или REMOTE? , панель «LOCAL» должна быть открыта в режиме только для чтения. У меня есть приблизительное представление о файлах "LOCAL", "REMOTE", "BASE" и "MERGED", однако рассматриваемый вариант Meld для меня не имеет смысла.