Sobes.tech
Назад к вопросам
Junior — Middle
69

Работали ли вы когда-нибудь с командой cherry-pick для выбора конкретных коммитов в git?

Компании, где спрашивали
Т-БанкТ-Банк
Digital Zone

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

Да, cherry-pick позволяет точечно перенести один или несколько коммитов из одной ветки в другую без полного слияния. Обычно его используют, когда нужно забрать только конкретный фикс или изменение. Важно понимать, что после cherry-pick могут возникать конфликты, и их нужно уметь решать.

Определение:

git cherry-pick — это команда Git, которая применяет изменения из выбранного коммита к текущей ветке, создавая новый коммит с теми же изменениями. В отличие от merge, она не переносит всю историю ветки, а берет только нужный коммит. Это удобно для точечных исправлений, hotfix и переноса багафикса между релизными ветками.

Пример использования:

Допустим, в ветке feature-login был сделан исправляющий коммит a1b2c3d, и это исправление нужно срочно перенести в release/1.2.

git checkout release/1.2
git cherry-pick a1b2c3d

Если коммитов несколько подряд:

git cherry-pick a1b2c3d^..d4e5f6g

Пояснение кода:

В первом примере сначала переключаются на целевую ветку release/1.2, затем команда cherry-pick применяет изменения из коммита a1b2c3d поверх текущего состояния ветки. В результате в release/1.2 появляется новый коммит с теми же изменениями, но с новым SHA, потому что история у ветки будет своя. Если возникают конфликты, их нужно исправить вручную, затем продолжить процесс через git cherry-pick --continue.

Во втором примере диапазон коммитов выбирается от a1b2c3d до d4e5f6g включительно, и Git последовательно применяет их на текущую ветку.

Ключевые моменты:

  • cherry-pick переносит не ветку целиком, а только выбранный коммит или диапазон коммитов.
  • После применения создается новый коммит с другим SHA.
  • Часто используется для hotfix, релизных веток и точечного переноса исправлений.
  • При конфликтах процесс можно продолжить после ручного разрешения через git cherry-pick --continue.
  • Нужно понимать разницу между cherry-pick, merge и rebase, чтобы применять команду осознанно.