Вопрос: скажем коммит Aответвляется от masterи вы сделать некоторую работу над этим, создавая дочерние фиксаций Bчерез E. Допустим E, добавлена только 1 строка из D. Если вам git cherry-pick Eнравится master, применяет ли он все изменения из Aсквозной Eв masterветку, или он применяет только изменения от Dк E, а именно добавляет только эту 1 строку master? Если дело касается первого, как мне достичь последнего? (кроме ручного копирования и вставки)
chharvey
7
git cherry-pick -n <commit> Если вы не хотите, чтобы вишня выбиралась автоматически.
Бен Флинн
6
Если BranchA не была отправлена на удаленный компьютер, вы можете изменить порядок коммитов, используя, rebaseа затем просто merge. Предпочтительно использовать mergeболее, rebaseкогда это возможно, потому что это не создает дублирующие коммиты.
git checkout BranchA
git rebase -i HEAD~113
... reorder the commits so the 10 you want are first ...
git checkout BranchB
git merge [the 10th commit]
Другой способ переместить введенную работу из одной ветви в другую - выбрать ее. Вишня в Git подобна перебазировке за один коммит. Он берет патч, который был введен в коммите, и пытается повторно применить его к ветке, в которой вы находитесь. Это полезно, если у вас есть несколько коммитов в ветке темы, и вы хотите интегрировать только один из них, или если у вас есть только один коммит в ветке темы, и вы предпочитаете выбрать его, а не запускать rebase. Например, предположим, у вас есть проект, который выглядит так:
Если вы хотите добавить коммит e43a6 в вашу основную ветку, вы можете запустить
$ git cherry-pick e43a6
Finished one cherry-pick.
[master]: created a0a41a9: "More friendly message when locking the index fails."
3 files changed, 17 insertions(+), 3 deletions(-)
Это влечет за собой то же изменение, которое было внесено в e43a6, но вы получаете новое значение SHA-1 для коммита, потому что примененная дата отличается. Теперь ваша история выглядит так:
Теперь вы можете удалить ветку своей темы и удалить коммиты, которые вы не хотели использовать.
Ответы:
Команда
git cherry-pick <commit>
позволяет вам взять один коммит (из любой ветки) и, по сути, перебазировать его в вашей рабочей ветке.Глава 5 книги Pro Git объясняет это лучше, чем я , в комплекте с диаграммами и тому подобным. ( Глава о ребазинге также хороша для чтения.)
И наконец, есть несколько хороших комментариев по поводу выбора вишни против слияния против перебазирования в другом вопросе SO .
источник
A
ответвляется отmaster
и вы сделать некоторую работу над этим, создавая дочерние фиксацийB
черезE
. ДопустимE
, добавлена только 1 строка изD
. Если вамgit cherry-pick E
нравитсяmaster
, применяет ли он все изменения изA
сквознойE
вmaster
ветку, или он применяет только изменения отD
кE
, а именно добавляет только эту 1 строкуmaster
? Если дело касается первого, как мне достичь последнего? (кроме ручного копирования и вставки)Если BranchA не была отправлена на удаленный компьютер, вы можете изменить порядок коммитов, используя,
rebase
а затем простоmerge
. Предпочтительно использоватьmerge
более,rebase
когда это возможно, потому что это не создает дублирующие коммиты.источник
ИСТОЧНИК: https://git-scm.com/book/en/v2/Distributed-Git-Maintainment-a-Project#Integrating-Contributed-Work
Другой способ переместить введенную работу из одной ветви в другую - выбрать ее. Вишня в Git подобна перебазировке за один коммит. Он берет патч, который был введен в коммите, и пытается повторно применить его к ветке, в которой вы находитесь. Это полезно, если у вас есть несколько коммитов в ветке темы, и вы хотите интегрировать только один из них, или если у вас есть только один коммит в ветке темы, и вы предпочитаете выбрать его, а не запускать rebase. Например, предположим, у вас есть проект, который выглядит так:
Если вы хотите добавить коммит e43a6 в вашу основную ветку, вы можете запустить
Это влечет за собой то же изменение, которое было внесено в e43a6, но вы получаете новое значение SHA-1 для коммита, потому что примененная дата отличается. Теперь ваша история выглядит так:
Теперь вы можете удалить ветку своей темы и удалить коммиты, которые вы не хотели использовать.
источник