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. Покажите, что знаете ограничения: зависимости между коммитами и дублирование в истории.