git cherry-pick

Перенос одного или нескольких конкретных коммитов из любой ветки в текущую — без слияния всей ветки целиком.

Зачем нужно

Иногда нужно перенести конкретное исправление или фичу из одной ветки в другую, не делая полноценный merge. Например: баг исправлен в develop, но его нужно срочно внести в release или hotfix. Cherry-pick копирует изменения нужного коммита и применяет их к текущей ветке как новый коммит с тем же сообщением.

Где используется

  • Перенос hotfix из develop в release или main без full merge
  • Извлечение конкретной фичи из заброшенной ветки
  • Gitflow: синхронизация fix-коммитов между параллельными ветками
  • Перенос коммита, который оказался не в той ветке

Основной контент

Базовые команды

# Перенести конкретный коммит в текущую ветку
git cherry-pick abc1234

# Перенести несколько коммитов
git cherry-pick abc1234 def5678 ghi9012

# Перенести диапазон коммитов (abc1234 не включается)
git cherry-pick abc1234..def5678

# Перенести диапазон включительно (оба конца)
git cherry-pick abc1234^..def5678

# Cherry-pick без создания коммита (применить как изменения)
git cherry-pick abc1234 --no-commit
git cherry-pick abc1234 -n

Управление при конфликтах

# Если возник конфликт — разрешить и продолжить
git add src/auth.js
git cherry-pick --continue

# Пропустить конфликтный коммит
git cherry-pick --skip

# Прервать cherry-pick и вернуться к исходному состоянию
git cherry-pick --abort

Пример: перенос hotfix

# Ситуация: баг исправлен в develop, нужен в main

# 1. Найти хэш нужного коммита
git log develop --oneline
# a1b2c3d fix(auth): исправить обработку истёкшего токена  ← нужен этот

# 2. Переключиться в целевую ветку
git switch main

# 3. Применить коммит
git cherry-pick a1b2c3d

# Git создаст новый коммит:
# fix(auth): исправить обработку истёкшего токена
# (cherry picked from commit a1b2c3d)

# 4. Опубликовать
git push origin main

Изменение сообщения при cherry-pick

# Применить с редактированием сообщения
git cherry-pick abc1234 --edit

# Применить изменения без коммита, написать своё сообщение
git cherry-pick abc1234 -n
git commit -m "fix(release): перенести исправление токена из develop"

Частые ошибки

  • Cherry-pick нескольких связанных коммитов не по порядку — применяй от старых к новым, иначе конфликты гарантированы
  • Cherry-pick вместо merge при переносе большого объёма — если нужно перенести 20+ коммитов целой фичи, merge или rebase предпочтительнее
  • Дублирование коммитов — после cherry-pick в ветке появляется коммит с другим хэшем; при последующем merge исходного коммита могут возникнуть конфликты
  • Не проверить, что хэш принадлежит нужной веткеgit log --oneline branch-name перед cherry-pick

Связанные темы

Ресурсы