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

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

Ответ

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

Базовый синтаксис:

git cherry-pick <commit-hash>
# Пример:
git cherry-pick abc123def

Как это работает:

  1. Git вычисляет разницу (патч), которую вносит выбранный коммит.
  2. Эта разница применяется к текущему состоянию вашей ветки (HEAD).
  3. Если применение прошло успешно, создается новый коммит с аналогичными изменениями.

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

  • Перенос hotfix: Исправление из main нужно применить к старой версии (release/v1.0).
  • Восстановление потерянного коммита: Коммит был случайно удален или потерян при сложном rebase.
  • Выборочное копирование фич: Взять только один конкретный коммит из feature-ветки, не сливая её целиком.

Важные особенности и риски:

  • Конфликты: Могут возникнуть, если изменения зависят от кода, отсутствующего в текущей ветке.
  • Дублирование коммитов: В истории появляется новый коммит с тем же содержимым, но другим хэшем.
  • Не для массового переноса: Для переноса многих коммитов предпочтительнее merge или rebase, чтобы сохранить историю и связи.

Практический совет: Используйте git cherry-pick -x, чтобы добавить в сообщение нового коммита строку (cherry picked from commit ...), что упрощает отслеживание происхождения изменений.