Gymterview
middle

Что такое cherry-pick?

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

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

Как работает cherry-pick

Пример
До cherry-pick:
main:    C1 -- C2 -- C3
                \
develop:         C4 -- C5 -- C6

Задача: применить C5 к main

После git cherry-pick C5:
main:    C1 -- C2 -- C3 -- C5'  (новый коммит с содержимым C5)
                \
develop:         C4 -- C5 -- C6

Использование

Пример
# Применить один коммит
git cherry-pick a1b2c3d

# Применить несколько коммитов
git cherry-pick a1b2c3d e4f5g6h

# Применить диапазон коммитов (НЕ включая начальный)
git cherry-pick a1b2c3d..e4f5g6h

# Применить диапазон коммитов (включая начальный)
git cherry-pick a1b2c3d^..e4f5g6h

# Cherry-pick без автоматического коммита (только применить изменения)
git cherry-pick --no-commit a1b2c3d

# Отменить cherry-pick при конфликте
git cherry-pick --abort

# Продолжить после разрешения конфликта
git cherry-pick --continue

Типичные сценарии использования

Hotfix из develop в release-ветку:

Пример
# Нашли и починили баг в develop, нужно срочно применить фикс в release
git switch release/2.0
git cherry-pick f1x2b3g  # хеш коммита с фиксом из develop

Перенос конкретной фичи без merge:

Пример
# Нужен только один коммит из чужой ветки
git cherry-pick abc1234

Ключевые моменты

  • Cherry-pick создаёт новый коммит с новым SHA-1 хешем — это копия, а не перемещение
  • При cherry-pick переносятся только изменения коммита, а не состояние всех файлов на тот момент
  • Если коммит зависит от предыдущих изменений, cherry-pick может привести к конфликтам
  • Cherry-pick — это точечный инструмент. Для переноса множества коммитов лучше использовать merge или rebase

Частые ошибки

  • Частое использование cherry-pick вместо merge/rebase — приводит к дублированию коммитов в истории
  • Cherry-pick коммита, который зависит от предыдущих — код может не компилироваться
  • Забывать, что cherry-pick создаёт дубликат — при последующем merge могут возникнуть конфликты
  • Не указывать ^ при диапазоне — A..B не включает коммит A

Как используется в 2026

  • Cherry-pick остаётся стандартным инструментом для hotfix-процессов
  • GitHub/GitLab предоставляют кнопку Cherry-pick в интерфейсе для удобного переноса коммитов между ветками
  • В Trunk-Based Development cherry-pick используется для создания release-веток из main
  • Автоматизированные инструменты (например, Mergify) могут выполнять cherry-pick автоматически по метке PR

На собеседовании: объясните, что cherry-pick — это точечный перенос изменений одного коммита. Ключевое: создаётся новый коммит с новым хешем (копия, не перемещение). Назовите типичный сценарий — hotfix из develop в release. Покажите, что знаете ограничения: зависимости между коммитами и дублирование в истории.