git - конфликт слияния - PullRequest
       8

git - конфликт слияния

0 голосов
/ 26 сентября 2019

У меня есть особенность и мастер ветка.Код одинаков для функции и основной ветки.Я делаю изменения в ветке функций и создаю ветку PR to Master.Я получаю конфликт при слиянии.

Я делаю следующее:

git checkout master
git pull origin <feature branch>
git commit
git pull origin HEAD

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

  1. Что нужно сделать, чтобы автоматическое слияние было успешным?
  2. Когда я вручную разрешаю конфликт слияния, сейчас я делаю PR, а теперь появляется сообщение об ошибке:Msgstr "Невозможно создать PR, так как мастер и ветка обновлены".Что нужно сделать, чтобы создать PR и затем объединить с мастером?

Ответы [ 2 ]

0 голосов
/ 26 сентября 2019

Если вы говорите, что «код одинаков для ветви функций и мастера», означает ли это, что единственное прямое редактирование происходит в ветви функций, которая затем должным образом объединяется с мастером?Если это так, то не должно не должно быть никаких конфликтов.

Ситуация меняется, хотя после того, как вы вручную изменили те же позиции кода в мастере, которые вы изменили в функцииветка.Это, конечно, противоречивые правки.(Если они точно идентичны байту, я думаю, что git не увидит конфликта, но я не уверен, и это может быть трудно достичь.)

Дело в том, чтоэти конфликты всплывают снова и снова, потому что ваши ручные захваты не регистрировались как слияния.Поэтому git пытается применить те же старые - слитые вручную - коммиты снова и снова.

Здесь может помочь функция git rerere .Он регистрирует и сохраняет предоставленные пользователем решения для конфликтов и применяет их к любым будущим коммитам, которые сталкиваются с такими же конфликтами.Поэтому я предлагаю активировать rerere, сделать одно слияние официальным способом, разрешающим все конфликты, и с этого момента все будущие слияния должны работать так, как они должны.

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

0 голосов
/ 26 сентября 2019

Я бы предложил вам следовать правильному порядку обработки слияния.

  1. Сначала получите последние версии обеих ветвей локально.
git checkout master
git pull 
git checkout feature
git pull 
Теперь, сделайте слияние основной ветви поверх ветви функций, чтобы получить другие основные изменения.Если автоматическое объединение может быть выполнено, оно выполнено.Git обрабатывает это автоматически.Вам не нужно ничего делать.Если автоматическое объединение не может быть выполнено, вы должны пройти через конфликты и разрешить их.
git checkout feature
git merge master
Как только вы разрешите конфликты, теперь ваша локальная функция будет впереди удаленного мастера.Теперь вы можете поднять запрос на извлечение.

Чтобы ответить на ваши вопросы:

  • Что нужно сделать, чтобы сделатьавтоматическое слияние, чтобы быть успешным?
    Ничего.Если автоматическое объединение возможно, оно выполняется автоматически.

  • Когда я разрешаю конфликт слияния вручную, сейчас я делаю PR, и теперь появляется сообщение об ошибке «Не удается создать PR, так как мастер и ветвь обновлены».Что нужно сделать, чтобы создать PR и затем объединить с мастером?
    Похоже, ваша ветвь функций просто указывает на ветку master.Это не имеет дополнительных изменений.Возможно, какой-то другой член команды уже создал PR, и ваша ветвь функций обновлена ​​до основной ветки.

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