Ответ
git cherry-pick применяет изменения из указанного существующего коммита в текущую ветку, создавая при этом новый коммит. Это полезно для переноса конкретного исправления или фичи без слияния всей истории другой ветки.
Типичный сценарий из моей практики: Допустим, я нашел и исправил критический баг в ветке develop, сделав коммит abc123. Мне нужно срочно применить это же исправление в ветке production, которая отстает по версии.
# 1. Перехожу в ветку, куда нужно перенести исправление
$ git checkout production
# 2. "Выбираю" нужный коммит из develop
$ git cherry-pick abc123
Git попытается применить патч из коммита abc123. Если изменений в коде между ветками нет, операция пройдет успешно, и в production появится новый коммит с тем же изменением, но своим собственным хэшем.
Что важно учитывать:
- Конфликты: Если код в области изменений отличается, возникнет конфликт слияния, который нужно разрешить вручную, как при обычном
merge. - Не копирует всю историю: Переносится только итоговый diff (разница) конкретного коммита. Это не замена полноценному слиянию веток.
- Использовать с осторожностью: Злоупотребление
cherry-pickможет привести к рассинхронизации истории и дублированию коммитов. Я использую его точечно, для переноса горячих исправлений (hotfix).