Git·19 вопросов

Что такое git cherry-pick и когда его использовать?

Ответ

git cherry-pick берёт изменения из конкретного коммита и применяет их к текущей ветке, создавая новый коммит с теми же изменениями. Это полезно, когда нужно перенести отдельное изменение, не объединяя всю ветку.

Когда использовать: вы сделали fix в feature-ветке, но он нужен и в main — cherry-pick переносит только этот коммит. Или вы случайно закоммитили в wrong branch — cherry-pick переносит коммит в правильную ветку. Также для переноса hotfix между релизными ветками: cherry-pick fix из main в release-1.2.

Как использовать: переключитесь на целевую ветку (git checkout main), затем git cherry-pick <commit-hash>. Git применит изменения из указанного коммита и создаст новый коммит в текущей ветке. Хэш нового коммита будет другим, но изменения и сообщение — те же. Можно перенести несколько коммитов: git cherry-pick <hash1> <hash2> <hash3> или диапазон: git cherry-pick <hash1>..<hash2>.

Конфликты при cherry-pick: если код вокруг изменений отличается между ветками, возникнет конфликт. Разрешите его как при обычном merge: отредактируйте файлы, git add, git cherry-pick --continue. Для отмены: git cherry-pick --abort.

Отличие от merge: merge объединяет всю ветку со всеми коммитами. cherry-pick переносит только указанные коммиты. Отличие от rebase: rebase переносит все коммиты ветки поверх другой. cherry-pick — точечный перенос.

Осторожность: cherry-pick создаёт дубликат коммита с новым хэшем. Если позже сделать merge ветки, из которой был cherry-pick, возможны конфликты из-за одинаковых изменений. Старайтесь cherry-pick только когда merge или rebase невозможны или нецелесообразны.

Практический сценарий: вы исправили критический баг в develop, но его нужно срочно доставить в main. git checkout main, git cherry-pick <fix-commit-hash>, git push. Fix в main без merge всей develop-ветки.

Полезен ли этот ответ?

Другие вопросы этой темы

Связанные вопросы из других тем