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

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

Ответ

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

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

# Находим хеш нужного коммита в истории другой ветки
git log feature/branch --oneline
# Переключаемся на целевую ветку (например, main)
git checkout main
# Применяем коммит
git cherry-pick abc123def

Практические сценарии и подводные камни:

  • Хотфиксы: Самый частый кейс. Исправление, сделанное в main, можно перенести в develop и другие долгоживущие ветки.
  • Конфликты: Если изменения в целевом коммите зависят от других, не перенесенных коммитов, возникнет конфликт слияния, который нужно разрешить вручную.
    # После конфликта...
    git add .
    git cherry-pick --continue
    # Или отмена операции
    git cherry-pick --abort
  • Метаданные: По умолчанию создается новый коммит с новым хешем. Флаг -x добавляет в сообщение коммита строку (cherry picked from commit ...), что полезно для аудита. Флаг --signoff добавляет подпись.

Рекомендация: Используйте cherry-pick для небольших, изолированных изменений. Для переноса целой функциональности или серии зависимых коммитов предпочтительнее merge или rebase, чтобы сохранить историю и избежать скрытых зависимостей.