Что такое операция cherry-pick в Git?

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

Ответ

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

Базовое использование:

# 1. Переключиться на целевую ветку
$ git checkout release-1.2

# 2. Выполнить cherry-pick коммита по его хешу
$ git cherry-pick abc123def

# 3. Если конфликтов нет, изменения будут применены и создан новый коммит.

Типичные сценарии в DevOps/CI-CD:

  • Перенос хотфикса: Исправление бага, сделанное в main после релиза, нужно применить к старой версии.
  • Избирательный бэкпорт: Не все фичи из develop подходят для текущего релиза — выбираем только конкретные коммиты.

Работа с конфликтами: Если при переносе возникают конфликты, Git приостановит операцию. Нужно разрешить конфликты вручную, добавить файлы (git add) и завершить операцию:

$ git cherry-pick --continue
# Или отменить, если передумали:
$ git cherry-pick --abort

Важные нюансы из практики:

  • Cherry-pick создаёт новый коммит с другим хешем, даже если изменения идентичны. Это может привести к дублированию кода в истории, если позже вы сделаете merge веток.
  • Лучше использовать для отдельных, самодостаточных коммитов. Перенос цепочки коммитов (git cherry-pick A..B) может быть сложным.
  • В пайплайнах CI/CD можно автоматизировать cherry-pick для промоутинга определённых коммитов между средами, но это требует аккуратного скриптования и проверки.