Ответ
git cherry-pick — это операция, которая применяет изменения из указанного коммита (или коммитов) к текущей ветке, создавая при этом новый коммит. Это полезно для точечного переноса исправлений, например, когда нужно внести хотфикс из ветки main в стабильную ветку release, не выполняя полного слияния веток.
Базовое использование:
# 1. Переключиться на целевую ветку
$ git checkout release-1.2
# 2. Выполнить cherry-pick коммита по его хешу
$ git cherry-pick abc123def
# 3. Если конфликтов нет, изменения будут применены и создан новый коммит.
Типичные сценарии в DevOps/CI-CD:
- Перенос хотфикса: Исправление бага, сделанное в
mainпосле релиза, нужно применить к старой версии. - Избирательный бэкпорт: Не все фичи из
developподходят для текущего релиза — выбираем только конкретные коммиты.
Работа с конфликтами:
Если при переносе возникают конфликты, Git приостановит операцию. Нужно разрешить конфликты вручную, добавить файлы (git add) и завершить операцию:
$ git cherry-pick --continue
# Или отменить, если передумали:
$ git cherry-pick --abort
Важные нюансы из практики:
- Cherry-pick создаёт новый коммит с другим хешем, даже если изменения идентичны. Это может привести к дублированию кода в истории, если позже вы сделаете merge веток.
- Лучше использовать для отдельных, самодостаточных коммитов. Перенос цепочки коммитов (
git cherry-pick A..B) может быть сложным. - В пайплайнах CI/CD можно автоматизировать cherry-pick для промоутинга определённых коммитов между средами, но это требует аккуратного скриптования и проверки.