Как слить конкретную фиксацию из одной ветки в другую в Git? - программирование

Как слить конкретную фиксацию из одной ветки в другую в Git?

У меня BranchA, который на 113 коммитов впереди BranchB.

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 3

Если 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]

Ответ 4

ИСТОЧНИК: https://git-scm.com/book/en/v2/Distributed-Git-Maintaining-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 commit, потому что применяемая дата отличается. Теперь ваша история выглядит так:

введите описание изображения здесь

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