Допустим, у вас есть репозиторий 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/ следующим образом:
Теперь перейдите в репозиторий следующим образом:
Теперь создайте main.c со следующим содержимым:
Теперь добавьте файл в промежуточную область следующим образом:
Теперь зафиксируйте изменения следующим образом:
Теперь создайте .gitignore файл со следующим содержанием:
Добавить файл в область подготовки.
Зафиксируйте изменения:
Как видите, сейчас у меня есть 2 коммита в моем master ветка.
Теперь я хочу отправить свой локальный репозиторий Git на удаленный сервер Git, чтобы другие люди могли работать с этим репозиторием. Вы здесь также можно использовать GitHub. Здесь я буду использовать для этого локальный SSH-сервер.
Итак, добавьте удаленный репозиторий Git U RL следующим образом:
Теперь переместите ветвь master в удаленный репозиторий Git следующим образом:
Теперь предположим, что bob хочет внести свой вклад в проект. Итак, он клонировал репозиторий Git на свой компьютер.
Теперь Боб переходит в каталог своего проекта.
У него также есть 2 добавленных мной коммита.
Теперь Боб создает ветвь test чтобы опробовать его идеи.
Он решает изменить возвращаемое значение константой EXIT_SUCCESS из stdlib библиотека.
Он добавляет изменения в промежуточную область .
Фиксирует изменения.
Теперь он решает использовать функцию printMessage () , чтобы распечатать сообщение. Итак, он пишет функцию.
Он фиксирует изменения очередной раз.
$ git commit -m ‘добавлена функция printMessage ()’
Затем Боб использует функцию в программе.
Он снова фиксирует изменения.
$ git commit -m ‘использовала функцию printMessage () для печати сообщения’
Теперь у bob есть следующие коммиты в ветке test .
Теперь Боб отправляет тестовую ветку в удаленный репозиторий Git.
Теперь вам звонит Боб и рассказывает о внесенных им потрясающих изменениях. Итак, вы загрузили изменения из удаленного репозитория Git в свой локальный репозиторий.
Теперь вы см. новую ветку origin/test .
Вы также обнаружили 3 новых коммита, которые сделал Боб.
Теперь вы хотите знать, какие изменения внес Боб.
Вы решили не заменять возвращаемое значение на EXIT_SUCCESS, как это сделал Боб.
Вам нравится идея использования функции для печати сообщений.
Вам тоже нравится этот коммит.
Итак, вы хотите объединить 2 из 3 сделанных коммитов. Если вы использовали git merge для слияния теста ветки, тогда будут применены все 3 коммита. Но с помощью функции git cherry pick вы можете объединять только те коммиты, которые вам нравятся.
Обратите внимание, что когда вы выбираете коммиты в Git, вы всегда начинаете с самого старого коммита и переходите к самому новому понемногу.
Раньше я выбирал вишню, файл main.c выглядит следующим образом.
Теперь давайте выберем самый старый из двух коммитов, 9a4e532, следующим образом:
Конфликт слияния! Это может случиться.
Теперь откройте main.c и устраните конфликт слияния.
Окончательный файл должен выглядеть следующим образом.
Теперь добавьте изменения в промежуточную область.
Теперь зафиксируйте изменения следующим образом :
ПРИМЕЧАНИЕ. Вы также можете использовать git commit и здесь тоже. Тебе решать. Я предпочитаю git cherry-pick –continue , поскольку он будет автоматически использовать сообщение о фиксации из фиксации, которую я выбираю.
Теперь введите здесь свое сообщение фиксации. и сохраните файл.
Должен быть добавлен новый коммит .
Теперь Cherry выбирает следующую фиксацию следующим образом:
Нет конфликта слияния. Большой! Новый коммит должен быть добавлен автоматически.
Как видите, я получил именно то, что хотел. Я объединил только те коммиты, которые мне были нужны.
Итак, вот как вы выбираете вишню в Git. Спасибо, что прочитали эту статью.