git cherry-pick illo

Git Cherry Pick

 

git cherry-pick — это полезная команда, с помощью которой можно выборочно применить коммиты Git к текущей рабочей ветке HEAD. С помощью команды git cherry-pick можно выбрать коммит из одной ветки и применить его к другой. Это удобный способ отменить изменения. Например, если коммит попал в ветку по ошибке, вы можете переключиться на нужную ветку и выполнить перенос.

Когда следует использовать команду git cherry-pick

Пользоваться командой git cherry-pick удобно, однако это не всегда оптимально. Она может привести к дублированию коммитов, поэтому нередко разработчики предпочитают обычное слияние. Таким образом можно сказать, что команда git cherry-pick — средство эффективное, но узконаправленное.

Работа в команде

Нередко отдельные участники команды работают над одним и тем же кодом. Это может происходить, когда новая функция продукта включает компоненты серверной и клиентской части, две составляющие продукта используют общий код или когда разработчик серверной части создает структуру данных, которую нужно будет использовать и в клиентской части. При этом разработчик клиентской части может с помощью команды git cherry-pick выбрать коммит, в котором условная структура данных была создана. Таким образом, он сможет продолжить работу над своими проектными задачами.

Исправление багов

Если был обнаружен баг, важно как можно скорее предоставить исправление конечным пользователям. Рассмотрим пример, когда разработчик начинает работу над новой функцией. В ходе работы обнаруживается существующий баг, и разработчик создает специальный коммит для его исправления. Этот коммит можно перенести прямо в основную ветку (master), чтобы исправить баг, прежде чем от него пострадают другие пользователи.

Отмена изменений и восстановление потерянных коммитов

Иногда функциональная ветка (feature) может устареть, что помешает слиянию с master, а запрос pull — удалиться без слияния изменений. Эти коммиты не исчезают без следа. Их можно найти в Git с помощью команд git log и git reflog, чтобы затем выборочно применить.

Как использовать команду git cherry-pick

Чтобы показать использование команды git cherry-pick, представим репозиторий со следующими ветками:

    a - b - c - d   Master
         \
           e - f - g Feature

Выполнить команду git cherry-pick довольно просто:

git cherry-pick commitSha

В этом примере commitSha является ссылкой на коммит. Такую ссылку можно найти с помощью команды git log. Предположим, что сейчас нам необходимо использовать коммит f в основной (master) ветке. Сначала нужно убедиться, что мы работаем над веткой master.

git checkout master

Затем совершим выборочное применение с помощью следующей команды:

git cherry-pick f

После выполнения команды история Git примет следующий вид:

    a - b - c - d - f   Master
         \
           e - f - g Feature

Коммит f был перенесен в функциональную ветку.

Примеры использования команды git cherry-pick

Команде git cherry-pick можно назначить ряд опций.

-edit

Если назначить команде опцию -edit, перед выборочным применением Git предложит указать сообщение коммита.

--no-commit

При использовании опции --no-commit выборочное применение не создаст новый коммит, а переместит содержимое целевого коммита в рабочий каталог текущей ветки.

--signoff

При выборочном применении опция --signoff добавляет строку с подписью в конце сообщения коммита.

Кроме этого, команде git cherry-pick можно назначить различные опции, определяющие стратегию слияния. Подробную информацию об этих опциях см. в документации по стратегиям слияния Git.

Команде git cherry-pick также можно назначить опции для разрешения конфликтов слияния, такие как --abort, --continue и --quit. Подробную информацию об этих опциях можно найти на страницах команд git merge и git rebase.

Резюме

Выборочное применение коммитов может стать оптимальным инструментом в некоторых ситуациях. Однако злоупотреблять командой git cherry-pick не стоит — иногда лучше подойдут команды git merge и git rebase. Чтобы находить коммиты для выборочного применения, используйте команду git log.