Интервью-вопрос
Что такое cherry-pick в Git
Cherry-pick нужен, когда вы хотите взять конкретное изменение из другой ветки без полного слияния. На практике важно проверить зависимости коммита, конфликты, сборку и затронутый UI-сценарий.
- Добавлен
- Редакция
Подготовьте короткий ответ и пару деталей на случай уточняющих вопросов.
Мини-квиз
Проверка перед разбором
Несколько быстрых вопросов перед разбором. Так проще поймать места, которые только кажутся понятными.
Вопрос 1 из 50 правильно
Разбор
Разобраться, а не зазубрить
Дальше разбираем суть, типичные уточнения и места, где легко сказать лишнее или перепутать термины.
Базовая идея
Cherry-pick отвечает на задачу: взять одно конкретное изменение из другой ветки и применить его здесь. Вы не сливаете всю ветку, не переносите весь ее контекст и не делаете ветку линейной. Вы просите Git взять diff выбранного коммита и наложить его на текущую ветку.
Базовый пример:
git switch release
git cherry-pick abc123После этого в ветке release появится новый коммит с теми же изменениями, что были в abc123. Hash будет другим, потому что у нового коммита другой родитель и другое место в истории.
Когда это полезно фронтенд-разработчику
Самый понятный сценарий на фронтенде: вы исправили баг в feature-ветке, но feature еще не готова к релизу. Например, в ней есть большой редизайн, а маленький fix формы нужен в production уже сегодня. Тогда cherry-pick позволяет перенести только fix, не подтягивая весь незавершенный код.
Хорошая формулировка на интервью:
Я использую cherry-pick для точечных переносов, например hotfix или backport в release-ветку. Но сначала проверяю, что коммит не зависит от других изменений, иначе можно перенести только половину решения.
Это звучит сильнее, чем просто назвать команду, потому что вы сразу показываете границы инструмента.
Как выбрать между cherry-pick, merge и rebase
Как выбрать подход
Используйте `git cherry-pick <hash>` и проверьте сборку.Выбирайте merge или pull request, а не набор cherry-pick.Перенесите зависимые коммиты в правильном порядке или не дробите цепочку.Сделайте `git cherry-pick --abort` и обсудите более безопасный способ переноса.Cherry-pick не лучше и не хуже merge сам по себе. Это инструмент для другой задачи. Если вы хотите интегрировать всю ветку, сохранить контекст review и не потерять связанные изменения, обычно нужен merge или pull request. Если вы хотите взять один самостоятельный fix, cherry-pick может быть быстрее и чище.
Rebase тоже решает другую задачу. Он переносит цепочку коммитов на новую базу и переписывает историю этой цепочки. Cherry-pick копирует выбранные изменения в текущую ветку. На интервью полезно прямо проговорить эту разницу.
Безопасный порядок действий
- 1Перейти в целевую ветку и обновить ее
- 2Проверить, что нужный коммит самодостаточен
- 3Выполнить `git cherry-pick <hash>`
- 4Решить конфликты или отменить перенос
- 5Запустить тесты, линтер или хотя бы локальную сборку
- 1Копировать случайный hash из другой ветки
- 2Игнорировать зависимые коммиты
- 3Разрешать конфликты без понимания кода
- 4Не проверять результат в UI
- 5Пушить fix в release без проверки истории
Перед командой стоит убедиться, что вы находитесь в целевой ветке. Частая практическая ошибка: разработчик cherry-pick-ит fix не туда, потом получает лишний коммит в рабочей ветке и тратит время на откат.
Плохой сценарий:
# Плохо: вы не проверили текущую ветку
git cherry-pick abc123
git pushТак можно отправить fix не в ту ветку, запустить лишний deploy или оставить release без нужного исправления. Безопаснее сначала проверить ветку, посмотреть состав коммита и прогнать минимальные проверки.
Безопаснее так:
git status
git switch release
git pull --ff-only
git show --stat abc123
git cherry-pick abc123
npm testНабор проверок зависит от проекта. Если тестов нет, все равно проверьте хотя бы сборку или конкретный пользовательский сценарий в браузере. Для фикса формы это ввод, submit, disabled-состояние, сообщение об ошибке и повторная отправка. Для сетевого фикса это один запрос вместо лишних дублей, корректная отмена или игнорирование устаревшего ответа.
Конфликты и откат
Конфликт при cherry-pick означает, что Git не смог автоматически применить изменения к текущей ветке. Это нормальная ситуация, особенно если ветки давно разошлись или один и тот же файл менялся в разных местах.
Если вы понимаете конфликт, исправьте файлы, добавьте их в индекс и продолжите операцию:
git status
# исправить файлы
git add src/Form.tsx
git cherry-pick --continueЕсли конфликт слишком большой или вы поняли, что коммит зависит от других изменений, лучше отменить перенос:
git cherry-pick --abortНа интервью не стоит говорить, что вы просто удаляете конфликтные куски. Лучше сказать, что проверяете смысл изменений и выбираете между корректным продолжением и безопасным откатом.
Главные риски
Риск cherry-pick не в самой команде, а в ложном ощущении точности. Коммит может выглядеть маленьким, но зависеть от нового API, обновленного типа, CSS-переменной, миграции или изменения в общей утилите. В Git операция пройдет, но приложение может сломаться позже: форма отправит лишний запрос, компонент покажет неверное состояние, SSR получит mismatch или обработка ошибки исчезнет.
Еще один риск связан с дублированием. Если похожие изменения уже попали в ветку другим путем, повторный cherry-pick может дать пустой перенос, конфликт или почти одинаковый код в двух местах. Поэтому полезно смотреть историю через git log, git show и проверять pull request, откуда взят коммит.
Практический вывод
Короткий сильный ответ должен быть таким: cherry-pick переносит не ветку, а выбранное изменение, создает новый коммит и требует проверки зависимостей. Для frontend это особенно важно, потому что ошибка может проявиться не сразу в Git, а в сборке, роутинге, UI-сценарии или интеграции с API.
Если хотите звучать уверенно, добавьте пример из рабочего процесса: hotfix в release, backport исправления или перенос маленького исправления без незавершенной feature-ветки. Затем назовите команды для конфликта: --continue и --abort.
Частые ошибки
Где обычно ошибаются
Проверьте формулировки, которые звучат уверенно, но на интервью быстро выдают пробелы.
- 1
Считать cherry-pick полноценным слиянием
Cherry-pick не переносит всю ветку и не сохраняет ее историю как merge. Он применяет изменения выбранного коммита к текущей ветке. Если сказать иначе, вас легко поймают вопросом про новыйhashи родителей коммита. - 2
Переносить зависимый коммит отдельно
Коммит может использовать типы, компоненты, CSS или API-контракт из соседних коммитов. Если перенести только часть, проект может пройти Git-операцию, но упасть на сборке или дать баг в UI. Перед cherry-pick проверьте diff и связанные изменения. - 3
Не проверять результат после успешной команды
Успешныйgit cherry-pickозначает только то, что Git применил изменения. Он не гарантирует, что приложение собирается, тесты проходят и сценарий работает в браузере. После переноса нужен минимум локальной проверки. - 4
Путать abort, continue и quit
git cherry-pick --abortоткатывает незавершенный перенос,--continueзавершает его после решения конфликтов, а--quitпрекращает режим операции, оставляя изменения в рабочем дереве. На интервью лучше уверенно назвать хотя бы--abortи--continue. - 5
Использовать cherry-pick вместо нормального процесса
Если команда постоянно переносит большие куски работы cherry-pick, история быстро становится запутанной. Для обычной интеграции feature-ветки лучше pull request, merge или rebase по правилам команды. Cherry-pick хорош как точечный инструмент, а не как основной workflow.
Follow-up
Что могут спросить дальше
Короткие ответы на вопросы, которыми проверяют понимание Git-операций и рисков переноса изменений.
Живые ответы
Видео с похожим вопросом
Если найдем публичные интервью с таким вопросом, добавим их сюда. Их удобно смотреть после теории, чтобы свериться с живыми ответами.
Пока видео нет. Когда появятся подходящие публичные интервью, добавим их в этот блок, чтобы можно было сравнить разбор с тем, как отвечают реальные кандидаты.
Какие знаешь подходы к скорости памяти алгоритма
Разбор вопроса «Какие знаешь подходы к скорости памяти алгоритма» для Frontend Developer: что проверяет интервьюер, ключевые тезисы, практические примеры и частые ошибки.
Что такое Git 😎
Git это распределенная система контроля версий для истории изменений, веток и совместной работы. Разбираем, как объяснить его на интервью и какие практические риски важно упомянуть фронтенд-разработчику.