Как мне объединить определенный коммит из одной ветви в другую в Git? - PullRequest
147 голосов
/ 16 июня 2011

У меня есть BranchA, что на 113 коммитов выше BranchB.

Но я хочу, чтобы последние 10 или около того коммитов из BranchA были объединены в BranchB.

Есть ли способ сделать это?

Ответы [ 4 ]

218 голосов
/ 16 июня 2011

Команда git cherry-pick <commit> позволяет вам взять один коммит (из любой ветви) и, по сути, перебазировать его в вашей рабочей ветви.

Глава 5 книги Pro Git объясняет это лучшечем я могу , в комплекте с диаграммами и тому подобное.( Глава о перебазировании также хорошо читается.)

Наконец, есть несколько хороших комментариев относительно выбора вишни против слияния против перебазировки в другом вопросе SO .

8 голосов
/ 16 июня 2011

Вы можете выбрать нужные коммиты.

Я нашел это Как выбрать несколько коммитов

Я бы сделал принятый ответ.

6 голосов
/ 19 февраля 2014

Если 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]
2 голосов
/ 16 ноября 2016

ИСТОЧНИК: https://git -scm.com / book / en / v2 / Distributed-Git-Maintenance-a-Project # Integrating-Contributed-Work

Другой способПереместить введённую работу из одной ветки в другую - это вишня подобрать.Вишня в Git подобна перебазировке за один коммит.Он берет патч, который был введен в коммите, и пытается повторно применить его в ветке, в которой вы находитесь.Это полезно, если у вас есть несколько коммитов в ветке темы, и вы хотите интегрировать только один из них, или если у вас есть только один коммит в ветке темы, и вы предпочитаете выбрать его, а не запускать rebase.Например, предположим, что у вас есть проект, который выглядит следующим образом:

enter image description here

Если вы хотите добавить commit 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 для коммита, потому что применяемая дата отличается.Теперь ваша история выглядит следующим образом:

enter image description here

Теперь вы можете удалить ветку своей темы и удалить коммиты, которые вы не хотели вставлять.

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