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

Ответ

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

Базовый синтаксис:

git cherry-pick <commit-hash>

Типичные сценарии использования:

  1. Перенос hotfix из main в старую версию:
    git checkout release-v1.0
    git cherry-pick abc123def  # Хеш коммита с исправлением из main
  2. Выборочное применение нескольких коммитов:
    git cherry-pick abc123 def456 ghi789
  3. Перенос коммита без немедленного коммита (для редактирования):
    git cherry-pick -n <commit-hash>  # Добавит изменения в рабочую директорию

Важные нюансы:

  • Конфликты: Как и при слиянии, могут возникнуть конфликты. После их разрешения выполните git cherry-pick --continue.
  • Новый хеш: Создаётся новый коммит с другим SHA-1, даже если изменения идентичны.
  • Зависимости: Коммит может зависеть от предыдущих изменений. Если их нет в целевой ветке, возможны ошибки.
  • История: Чрезмерное использование cherry-pick усложняет историю, делая её нелинейной. Предпочтительнее для изолированных исправлений, а не для целых фич.

Отмена операции: git cherry-pick --abort

Ответ 18+ 🔞

Да ты посмотри, какая хитрая жопа эта git cherry-pick! Ну реально, как будто ты с куста вишенки обрываешь, только коммиты вместо ягод. Суть проще пареной репы: взял один конкретный коммит оттуда, хуяк — и прилепил сюда, к своей текущей ветке. Новый коммит создаётся, всё по-честному. Полное слияние веток не нужно, если тебе одна-две правки перетащить.

Как это выглядит, блядь:

git cherry-pick <commit-hash>

А применяется это чудо вот в каких случаях, ёпта:

  1. Срочный фикс из main в старую версию засунуть надо.
    git checkout release-v1.0
    git cherry-pick abc123def  # Вот этот самый спасительный коммит из main
  2. Несколько коммитов подряд, но не все подряд.
    git cherry-pick abc123 def456 ghi789
  3. Перенести, но не коммитить сразу — вдруг подправить что.
    git cherry-pick -n <commit-hash>  # Изменения просто в рабочую директорию скинет

А теперь, чувак, блядь, держи ухо востро — нюансы-то какие!

  • Конфликты: Ага, щас! Могут вылезти, как гланды при ангине. Разрулил их — делай git cherry-pick --continue и не парься.
  • Хеш новый: Даже если изменения один в один, коммит-то будет новый, с другим SHA-1. История, блядь, нелинейная получается.
  • Зависимости: А если этот коммит на плечах у предыдущих стоит, которых у тебя в ветке нет? Вот тут и начнётся веселье, ошибки посыпятся.
  • История: Если этим делом злоупотреблять, как мартышка бананами, история репозитория превратится в ёбучую паутину. Лучше для точечных исправлений, а не для целых фич таскать.

Обдристался? Ничего страшного: git cherry-pick --abort, и все твои начинания накрылись медным тазом. Как будто ничего и не было.