Как выбрать Cherry Pick в Git

git cherry pick — это функция слияния Git. Но есть небольшая разница в git cherry pick и git merge. Кроме того, другой вариант использования. Давайте сначала посмотрим, как работает git merge, а затем сравним его с git cherry pick. Таким образом, вы поймете, когда использовать git merge, а когда git cherry pick.

Допустим, у вас есть репозиторий Git. Вы работаете над веткой master и сделали несколько коммитов ( A, B и C ) на master .

Теперь все внезапно у вас возникла отличная идея. Итак, вы создали еще одну ветку newidea . Затем вы начали делать коммиты ( E, F и G ) там.

Вы также снова внесли некоторые изменения в ветку master и добавили новый коммит H .

Теперь, если ваша новая идея удалась, тогда вы может захотеть объединить ветвь newidea с ветвью master . Допустим, вы слили это. Будет создана новая фиксация I , как вы можете видеть на рисунке ниже. Новый коммит будет содержать все (все изменения в коммитах E , F и G ) ветки. newidea .

Теперь предположим, что вы не хотите объединять все коммиты ветки newidea с ветвью master . Вам нужно только объединить изменения (только изменения различий) в фиксации F с ветвью master . Здесь на помощь приходит git cherry pick. Git cherry pick позволяет вам это делать. Вы просто находите хэш коммита, который хотите выбрать, и применяете его к нужной ветке. Очень просто.

В этой статье я покажу вам, как выбирать вишню в Git. Итак, приступим.

Рабочий процесс Git Cherry Pick:

В этом разделе я собираюсь настроить репозиторий Git таким образом, чтобы вы поняли, почему Используется git cherry pick и как выбрать вишню в Git.

Сначала инициализируйте пустой репозиторий Git cherry-pick-demo/ следующим образом:

$ git init cherry-pick-demo

Теперь перейдите в репозиторий следующим образом:

$ cd cherry-pick-demo/

Теперь создайте main.c со следующим содержимым:

Теперь добавьте файл в промежуточную область следующим образом:

$ git add.

Теперь зафиксируйте изменения следующим образом:

$ git commit -m ‘initial commit’

Теперь создайте .gitignore файл со следующим содержанием:

Добавить файл в область подготовки.

$ git add.

Зафиксируйте изменения:

$ git commit -m ‘добавил файл .gitignore’

Как видите, сейчас у меня есть 2 коммита в моем master ветка.

$ git log —oneline

Теперь я хочу отправить свой локальный репозиторий Git на удаленный сервер Git, чтобы другие люди могли работать с этим репозиторием. Вы здесь также можно использовать GitHub. Здесь я буду использовать для этого локальный SSH-сервер.

Итак, добавьте удаленный репозиторий Git U RL следующим образом:

$ git remote add origin git@git.linuxhint.com: ~/cherry-pick-demo.git

Теперь переместите ветвь master в удаленный репозиторий Git следующим образом:

$ git push origin master

Теперь предположим, что bob хочет внести свой вклад в проект. Итак, он клонировал репозиторий Git на свой компьютер.

$ git clone git@git.linuxhint.com: ~/cherry-pick-demo.git myproject

Теперь Боб переходит в каталог своего проекта.

$ cd myproject/

У него также есть 2 добавленных мной коммита.

$ git log —oneline

Теперь Боб создает ветвь test чтобы опробовать его идеи.

$ git checkout -b test

Он решает изменить возвращаемое значение константой EXIT_SUCCESS из stdlib библиотека.

Он добавляет изменения в промежуточную область .

$ git add.

Фиксирует изменения.

$ git commit -m ‘использовал EXIT_SUCCESS вместо 0 в качестве возвращаемого значения’

Теперь он решает использовать функцию printMessage () , чтобы распечатать сообщение. Итак, он пишет функцию.

Он фиксирует изменения очередной раз.

$ git add.
$ git commit -m ‘добавлена ​​функция printMessage ()’

Затем Боб использует функцию в программе.

Он снова фиксирует изменения.

$ git add .
$ git commit -m ‘использовала функцию printMessage () для печати сообщения’

Теперь у bob есть следующие коммиты в ветке test .

Теперь Боб отправляет тестовую ветку в удаленный репозиторий Git.

$ git push origin test

Теперь вам звонит Боб и рассказывает о внесенных им потрясающих изменениях. Итак, вы загрузили изменения из удаленного репозитория Git в свой локальный репозиторий.

$ git fetch

Теперь вы см. новую ветку origin/test .

Вы также обнаружили 3 новых коммита, которые сделал Боб.

$ git log —oneline origin/test

Теперь вы хотите знать, какие изменения внес Боб.

$ git log -p origin/test

Вы решили не заменять возвращаемое значение на EXIT_SUCCESS, как это сделал Боб.

Вам нравится идея использования функции для печати сообщений.

Вам тоже нравится этот коммит.

Итак, вы хотите объединить 2 из 3 сделанных коммитов. Если вы использовали git merge для слияния теста ветки, тогда будут применены все 3 коммита. Но с помощью функции git cherry pick вы можете объединять только те коммиты, которые вам нравятся.

Обратите внимание, что когда вы выбираете коммиты в Git, вы всегда начинаете с самого старого коммита и переходите к самому новому понемногу.

Раньше я выбирал вишню, файл main.c выглядит следующим образом.

Теперь давайте выберем самый старый из двух коммитов, 9a4e532, следующим образом:

$ git cherry-pick 9a4e532

Конфликт слияния! Это может случиться.

Теперь откройте main.c и устраните конфликт слияния.

Окончательный файл должен выглядеть следующим образом.

Теперь добавьте изменения в промежуточную область.

$ git add.

Теперь зафиксируйте изменения следующим образом :

$ git cherry-pick —continue

ПРИМЕЧАНИЕ. Вы также можете использовать git commit и здесь тоже. Тебе решать. Я предпочитаю git cherry-pick –continue , поскольку он будет автоматически использовать сообщение о фиксации из фиксации, которую я выбираю.

Теперь введите здесь свое сообщение фиксации. и сохраните файл.

Должен быть добавлен новый коммит .

Теперь Cherry выбирает следующую фиксацию следующим образом:

$ git cherry-pick 08ba5e7

Нет конфликта слияния. Большой! Новый коммит должен быть добавлен автоматически.

Как видите, я получил именно то, что хотел. Я объединил только те коммиты, которые мне были нужны.

Итак, вот как вы выбираете вишню в Git. Спасибо, что прочитали эту статью.

Оцените статью
nanomode.ru
Добавить комментарий