Что делает команда git cherry-pick?

«Что делает команда git cherry-pick?» — вопрос из категории DevOps, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Типичный сценарий из моей практики: Допустим, я нашел и исправил критический баг в ветке develop, сделав коммит abc123. Мне нужно срочно применить это же исправление в ветке production, которая отстает по версии.

# 1. Перехожу в ветку, куда нужно перенести исправление
$ git checkout production

# 2. "Выбираю" нужный коммит из develop
$ git cherry-pick abc123

Git попытается применить патч из коммита abc123. Если изменений в коде между ветками нет, операция пройдет успешно, и в production появится новый коммит с тем же изменением, но своим собственным хэшем.

Что важно учитывать:

  • Конфликты: Если код в области изменений отличается, возникнет конфликт слияния, который нужно разрешить вручную, как при обычном merge.
  • Не копирует всю историю: Переносится только итоговый diff (разница) конкретного коммита. Это не замена полноценному слиянию веток.
  • Использовать с осторожностью: Злоупотребление cherry-pick может привести к рассинхронизации истории и дублированию коммитов. Я использую его точечно, для переноса горячих исправлений (hotfix).