Git Cherry-Pick и конфликты

Есть две разные ветки git. В одном идет разработка (ветка 1).

В другой ветке идет работа по PoC (ветка 2). Теперь я хочу выбрать изменения из Branch1 в Branch2, чтобы Branch2 был обновлен.

Теперь, после выбора 4 или 5 изменений, у меня возникает конфликт слияния, и я не могу продолжить дальнейшие выборки.

Нужно ли мне разрешать все конфликты, прежде чем переходить к следующему варианту выбора, или я могу как-то отложить разрешение конфликта, пока я не выберу все изменения (и не решу все конфликты вместе)?

Кроме того, предлагается ли в этом случае выполнять выборку вишни или слияние ветвей?


person Kumar    schedule 07.11.2013    source источник
comment
Один из возможных способов избежать этих конфликтов выбора вишни — это выбирать вишни в порядке от самой старой фиксации до самой последней фиксации, то есть на основе даты фиксации.   -  person Saurav Sahu    schedule 22.01.2017


Ответы (3)


Да, мне нужно разрешить все конфликты, прежде чем переходить к следующему выбору вишни.

Да, по крайней мере, со стандартной настройкой git. Вы не можете выбирать вишни, пока есть конфликты.

Кроме того, чем больше у вас ресурсов, тем сложнее разрешать конфликты, поэтому обычно лучше разрешать их один за другим.

Тем не менее, вы можете выбрать сразу несколько коммитов, что сделает то, о чем вы просите. См., например. Как выбирать несколько коммитов . Это полезно, если, например, некоторые коммиты отменяют более ранние коммиты. Затем вы захотите выбрать все за один раз, чтобы вам не приходилось разрешать конфликты для изменений, которые отменены более поздними коммитами.

Кроме того, предлагается ли в этом случае выполнять выборку вишни или слияние ветвей?

Как правило, если вы хотите поддерживать ветку функций в актуальном состоянии с основной разработкой, вы просто объединяете ветку master -> feature. Основное преимущество заключается в том, что последующее слияние ветки → master будет гораздо менее болезненным.

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

person sleske    schedule 07.11.2013

Прежде чем продолжить:

  • Установите правильный инструмент слияния. В Linux я настоятельно рекомендую вам использовать команду meld:

    sudo apt-get install meld
    
  • Настройте свой инструмент слияния:

    git config --global merge.tool meld
    

Затем выполните итерацию следующим образом:

git cherry-pick ....
git mergetool
git cherry-pick --continue
person Claudio    schedule 07.11.2013

Кроме того, чтобы завершить то, что сказал @claudio, при выборе вишни вы также можете использовать стратегию слияния.

Так что вы могли бы что-то вроде этого git cherry-pick --strategy=recursive -X theirs commit или git cherry-pick --strategy=recursive -X ours commit

person jeremie    schedule 11.06.2019