Как открыть PR GitHub для предложенной вишенки - PullRequest
1 голос
/ 26 мая 2020

запросы на вытягивание GitHub - это слияние двух веток вместе:

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

    Например, достаточно ли создать ветку, HEAD которой является фиксацией, которую я хочу выбрать вишню, и открыть PR для этой ветки?

1 Ответ

1 голос
/ 26 мая 2020

Выбор вишни действительно пытается объединить два патча вместе, но вы не сможете создать запрос на слияние в своей рабочей ветке , который выполняет то же действие, что и выбор вишни.


Подробный вид избранного:

Вот мой go при иллюстрации операции слияния, выполненной git cherry-pick:

Предположим, вы запускаете git cherry-pick eacf32 из ветка my/work:

# 'p' marks the parent commit of eacf32 :
---*-----*-----*------*-----* <- my/work
          \                   
           \               
            \-*---*----*----*-----*-----* <- some/other/branch
                       ^    ^
                       p   eacf32

# 'git cherry-pick eacf32' will try to resolve this merge :

                         my/work
                          v
---*-----* . . * . .* . . *----* <- would-be-cherry-pick
          \              /    /
           \            /    /
            \-*---*----*----* . . * . . *
                       ^    ^
                       p   eacf32

Превращение его в эквивалентное слияние:

Следуя этой диаграмме:

  • , вам понадобится ветка cherrypick/target с фактическим содержимым my/work, сгруппированная как одна фиксация поверх p - родительской фиксации eacf32:

    # start from your branch (you will have the expected content) :
    git checkout my/work
    # create a new branch and switch to it :
    git checkout -b cherrypick/target
    # use 'reset --soft' to move to the parent of eacf32
    # ('--soft' will keep all the differences as staged changes) :
    git reset --soft eacf32^
    # commit that :
    git commit
    
  • you нужна ветка cherrypick/source в eacf32:

    git branch cherrypick/source eacf32
    
  • , вы должны объединить cherrypick/source в cherrypick/target


Что делать с результатом этого слияния?

Возможные конфликты слияния и содержание конечного результата будут такими же, как и в случае выбора вишни, вы, очевидно, h ave выбрать содержимое этого коммита поверх вашей фактической my/work ветки.

Как видно из диаграммы: база слияния для вишневого выбора должна быть p, поэтому вы не сможете создать PR для своей начальной my/work ветки, которая дает тот же результат, что и выбор вишни.

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