У меня BranchAесть 113 коммитов впереди BranchB.
Но я хочу, чтобы последние 10 или около того коммитов были BranchAобъединены в BranchB.
Есть ли способ сделать это?
У меня BranchAесть 113 коммитов впереди BranchB.
Но я хочу, чтобы последние 10 или около того коммитов были BranchAобъединены в BranchB.
Есть ли способ сделать это?
Ответы:
Команда 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когда это возможно, потому что это не создает дублирующие коммиты.
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]
ИСТОЧНИК: https://git-scm.com/book/en/v2/Distributed-Git-Maintainment-a-Project#Integrating-Contributed-Work
Другой способ переместить введенную работу из одной ветви в другую - выбрать ее. Вишня в 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 для коммита, потому что примененная дата отличается. Теперь ваша история выглядит так:
Теперь вы можете удалить ветку своей темы и удалить коммиты, которые вы не хотели использовать.