Git Cherry-pick
Последнее обновление
git cherry-pick копирует изменения из одного или нескольких конкретных коммитов и применяет их к вашей текущей ветке в виде новых коммитов. Так можно взять одно исправление из другой ветки, не сливая всю эту ветку целиком - удобно для бэкпорта хотфикса или для того, чтобы вытащить один коммит из ветки функциональности.
Попробуйте эти команды в терминальном playground - настоящая оболочка в вашем браузере, ничего не нужно устанавливать.
Синтаксис
| Command | What it does |
|---|---|
git cherry-pick <hash> | Применяет один коммит к текущей ветке |
git cherry-pick <a> <b> | Применяет несколько коммитов по порядку |
git cherry-pick <a>..<b> | Применяет диапазон коммитов (исключая a) |
git cherry-pick -n <hash> | Применяет изменения, но пока не коммитит |
git cherry-pick -x <hash> | Отмечает исходный коммит в сообщении |
Во время cherry-pick
Если cherry-pick приводит к конфликту, разрешите его и продолжите.
| Command | What it does |
|---|---|
git cherry-pick --continue | Продолжает после разрешения конфликтов |
git cherry-pick --abort | Отменяет и восстанавливает ветку |
git cherry-pick --skip | Пропускает текущий коммит |
Часто задаваемые вопросы о git cherry-pick
Что делает git cherry-pick?
Он берёт изменения, внесённые конкретным коммитом, и применяет их к вашей текущей ветке в виде совершенно нового коммита (с новым hash). В отличие от merge или rebase, он не переносит целую ветку - только тот коммит или коммиты, которые вы указали.
Когда стоит использовать cherry-pick?
Используйте его, когда вам нужен конкретный коммит в другом месте - например, чтобы сделать бэкпорт исправления ошибки из
main в release-ветку или вытащить один полезный коммит из ветки функциональности, не сливая всё. Если вам нужна вся ветка целиком, используйте merge или rebase.Как сделать cherry-pick нескольких коммитов?
Перечислите их:
git cherry-pick <a> <b> <c> применяет каждый по порядку. Для непрерывного диапазона используйте git cherry-pick <start>..<end>, который применяет каждый коммит после start вплоть до end включительно. Добавьте <start>^..<end>, если хотите включить и сам start.Что делать, если cherry-pick вызывает конфликт?
Git приостанавливается и помечает конфликтующие файлы. Разрешите их, выполните
git add для результатов, затем запустите git cherry-pick --continue. Чтобы полностью отменить операцию, используйте git cherry-pick --abort, который возвращает вашу ветку в состояние до начала cherry-pick.Можно ли попрактиковаться в этом онлайн?
Да. Откройте терминальный playground, чтобы выполнить
git cherry-pick в настоящей оболочке в вашем браузере - ничего не нужно устанавливать. Бесплатный интерактивный курс Git от Coddy также пошагово охватывает перенос коммитов между ветками.