Допустим, у вас есть репозиторий Git. Вы работаете над владелец ветвь, и вы сделали несколько коммитов (А, В и С) на владелец филиал также.
Теперь, внезапно, у вас есть отличная идея. Итак, вы создаете еще одну ветку Новая идея. Затем вы начали делать коммиты (E, F и G) там.
Вы также внесли некоторые изменения в владелец ветку снова и добавил новый коммит ЧАС.
Теперь, если ваша новая идея удалась, вы можете объединить Новая идея ветвь к владелец ветка. Допустим, вы слили это. Это создаст новую фиксацию я как вы можете видеть на рисунке ниже. Новый коммит будет содержать все (все изменения в коммитах E, F, а также грамм) филиала Новая идея.
Теперь, допустим, вы не хотите объединять все коммиты ветки Новая идея к владелец ветка. Вы хотите только объединить изменения (только изменения diff) в фиксации F к владелец ветка. Здесь на помощь приходит git cherry pick. Git Cherry Pick позволяет вам это сделать. Вы просто находите хэш коммита, который хотите выбрать, и применяете его к нужной ветке. Очень простой.
В этой статье я покажу вам, как выбирать вишню в Git. Итак, приступим.
Рабочий процесс Git Cherry Pick:
В этом разделе я собираюсь настроить репозиторий Git таким образом, чтобы вы поняли, почему используется git cherry pick и как выбирать вишню в Git.
Сначала инициализируйте пустой репозиторий Git Cherry-Pick-Demo / следующим образом:
$ git init вишневый выбор-демонстрация
Теперь перейдите в репозиторий следующим образом:
$ cd cherry-pick-demo /
Теперь создайте основной.c файл со следующим содержанием:
Теперь добавьте файл в промежуточную область следующим образом:
$ git add .
Теперь зафиксируйте изменения следующим образом:
$ git commit -m 'начальная фиксация'
Теперь создайте .gitignore файл со следующим содержанием:
Добавьте файл в промежуточную область.
$ git add .
Зафиксируйте изменения:
$ git commit -m 'добавлен .gitignore файл '
Как видите, у меня сейчас 2 коммита в моем владелец ветка.
$ git log --oneline
Теперь я хочу отправить свой локальный репозиторий Git на удаленный сервер Git, чтобы другие люди могли работать с этим репозиторием. Вы также можете использовать GitHub здесь. Я буду использовать для этого локальный SSH-сервер здесь.
Итак, добавьте URL-адрес удаленного репозитория Git следующим образом:
$ git удаленное добавление источника git @ git.linuxhint.com: ~ / Cherry-Pick-demo.мерзавец
Теперь нажмите владелец перейти к удаленному репозиторию Git следующим образом:
$ git push origin master
Теперь скажем боб хочет внести свой вклад в проект. Итак, он клонировал репозиторий Git на свой компьютер.
$ git clone git @ git.linuxhint.com: ~ / Cherry-Pick-demo.git myproject
Теперь Боб переходит в каталог своего проекта.
$ cd myproject /
У него также есть 2 коммита, которые я добавил.
$ git log --oneline
Теперь Боб создает контрольная работа ветка, чтобы опробовать его идеи.
$ git checkout -b тест
Он решает изменить возвращаемое значение на константу 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 есть следующие коммиты в контрольная работа ветка.
Теперь Боб отправляет тестовую ветку в удаленный репозиторий Git.
$ git push origin test
Теперь вам звонит Боб и рассказывает о внесенных им потрясающих изменениях. Итак, вы загрузили изменения из удаленного репозитория Git в свой локальный репозиторий.
$ git fetchТеперь вы видите новую ветку происхождение / тест.
Вы также нашли 3 новых коммита, которые сделал Боб.
$ git log --oneline origin / test
Теперь вы хотите знать, какие изменения внес Боб.
$ git log -p происхождение / тест
Вы решили не заменять возвращаемое значение на EXIT_SUCCESS, как это сделал Боб.
Вам нравится концепция использования функции для печати сообщений.
Вам тоже нравится этот коммит.
Итак, вы хотите объединить 2 из 3 сделанных бобом коммитов. Если вы использовали git merge для слияния теста ветки, тогда будут применены все 3 коммита. Но с функцией git cherry pick вы можете объединять только те коммиты, которые вам нравятся.
Обратите внимание: когда вы выбираете коммиты в Git, вы всегда начинаете с самого старого коммита и постепенно переходите к самому новому.
Раньше я собирал вишню, основной.c файл выглядит следующим образом.
Теперь давайте выберем самый старый из двух коммитов, 9a4e532, следующим образом:
$ git вишневый выбор 9a4e532
Конфликт слияния! Это может случиться.
Теперь откройте основной.c файл и исправить конфликт слияния.
Окончательный файл должен выглядеть следующим образом.
Теперь добавьте изменения в область подготовки.
$ git add.
Теперь зафиксируйте изменения следующим образом:
$ git cherry-pick - продолжить
ПРИМЕЧАНИЕ: Вы также можете использовать git commit и здесь. Тебе решать. я предпочитаю git cherry-pick -продолжить поскольку он будет автоматически использовать сообщение фиксации из фиксации, которую я выбираю.
Теперь введите здесь сообщение о фиксации и сохраните файл.
Должен быть добавлен новый коммит.
Теперь Cherry выбирает следующую фиксацию следующим образом:
$ git вишневый выбор 08ba5e7
Нет конфликта слияния. большой! Новый коммит должен быть добавлен автоматически.
Как видите, я получаю именно то, что хотел. Я объединил только те коммиты, которые мне нужны.
Итак, вот как вы выбираете вишню в Git. Спасибо, что прочитали эту статью.