Существует ли аддитивная стратегия слияния? - PullRequest
0 голосов
/ 18 января 2019

У меня есть мастер ветки, где у меня есть файл Prova.c:

int main()
{
     printf("Ciao mondo");
}

и ветка с именем c ++ version, где я изменил тот же файл Prova.c, например:

#include <iostream>

using namespace std;
int main()
{
     cout<<"Ciao mondo"<<endl;
}

На мастере я делаю команду (с добавлением и коммитом в обе ветви):

git merge c++version

и я получаю в мастере этот файл Prova.c:

#include <iostream>

using namespace std;
int main()
{
    cout<<"Ciao mondo"<<endl; \\I don't like this
}

Мне не нравится результат. Я хотел и printf, и cout, но у меня есть только cout. Какую стратегию слияния (или другое решение) я могу принять? Или в крайнем случае, как я могу навязать этот мерзавец каждый раз, чтобы разрешить все конфликты?

1 Ответ

0 голосов
/ 19 января 2019

Похоже, у вас есть ситуация, когда у вас есть одна ветвь с областью неизмененного кода (master) и одна ветвь, которая была изменена (c++version). Когда у вас такая ситуация и вы сливаетесь в измененную ветку, Git включает все эти изменения, потому что результатом слияния является сумма всех изменений с обеих сторон.

В этом случае часть внесенных изменений заключается в удалении строки printf и вставке строки cout. Добавления и удаления являются частью этого изменения.

Конфликт возникает только тогда, когда один и тот же код изменяется с обеих сторон. Если изменена только одна сторона, то объединение включает это изменение. Вот как работает слияние. Git действительно предоставляет стратегии, чтобы принять только одну или другую сторону, но это не поможет вам в этом случае, так как вы не хотите удалять какие-либо строки, а Git не предлагает стратегию, которая делает это.

Более того, такая стратегия не будет очень полезной, потому что неясно, в каком порядке вы хотите добавить строки (это до или после существующих строк?), И, следовательно, каждое такое объединение должно приводить к в конфликте, чтобы вы могли это исправить.

Это одна из тех ситуаций, когда слияние выполняется синтаксически, но приводит к семантически нежелательным изменениям. Вы можете изменить слияние с помощью git commit --amend, чтобы изменить результат слияния, но помимо этого, Git действительно не так много предлагает для этой ситуации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...