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 | Пропускает текущий коммит |
Пример по шагам
| Шаг | Команда | Результат |
|---|---|---|
| 1 | git log --oneline hotfix | Найдите хеш исправления, например a1b2c3d |
| 2 | git switch main | Перейдите в ветку, которая должна получить исправление |
| 3 | git cherry-pick a1b2c3d | Применяет исправление к main как новый коммит с новым хешем |
Часто задаваемые вопросы о git cherry-pick
Что делает git cherry-pick?
Когда стоит использовать 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 add для результатов, затем запустите git cherry-pick --continue. Чтобы полностью отменить операцию, используйте git cherry-pick --abort, который возвращает вашу ветку в состояние до начала cherry-pick.Как перенести коммит из другой ветки через cherry-pick?
git log --oneline <other-branch>, переключитесь на ветку, которая должна его получить, и выполните git cherry-pick <hash>. Можно передать и имя ветки, например git cherry-pick feature: тогда будет взят коммит с вершины этой ветки.Чем cherry-pick отличается от merge?
Можно ли попрактиковаться в этом онлайн?
git cherry-pick в настоящей оболочке в вашем браузере - ничего не нужно устанавливать. Бесплатный интерактивный курс Git от Coddy также пошагово охватывает перенос коммитов между ветками.