Выбор вишни действительно пытается объединить два патча вместе, но вы не сможете создать запрос на слияние в своей рабочей ветке , который выполняет то же действие, что и выбор вишни.
Подробный вид избранного:
Вот мой 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
ветки, которая дает тот же результат, что и выбор вишни.