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

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

Ответ

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

Основное применение:

  • Перенос конкретного исправления (фикса) из одной ветки в другую.
  • Восстановление потерянного коммита.
  • Точечное применение изменений, когда полное слияние нежелательно.

Пример использования:

git cherry-pick abc123def

Где abc123def — хэш целевого коммита.

Ключевые особенности и нюансы:

  1. Создает новый коммит: Изменения применяются как новый коммит в текущей ветке, даже если содержимое идентично исходному. Хэш и метаданные (например, дата) будут другими.
  2. Авторство сохраняется: Автор (Author) оригинального коммита сохраняется. Коммитером (Committer) становится пользователь, выполнивший cherry-pick.
  3. Возможны конфликты: Если изменения зависят от кода, отсутствующего в текущей ветке, возникнет конфликт, который нужно разрешить вручную.
  4. Может нарушить историю: Чрезмерное использование усложняет отслеживание происхождения кода и создает нелинейную историю. Рекомендуется для точечных операций, а не для систематического переноса функциональности.

Полезные флаги:

  • -n (--no-commit): Применяет изменения, но не создает коммит, позволяя добавить их в существующий.
  • -x: Добавляет в сообщение нового коммита строку (cherry picked from commit ...) для упрощения отслеживания.