Ответ
Команда git cherry-pick применяет изменения из указанного коммита (или коммитов) к текущей ветке, создавая новый коммит. Это позволяет переносить отдельные правки между ветками без полного слияния.
Базовый синтаксис:
git cherry-pick <commit-hash>
Типичные сценарии использования:
- Перенос hotfix из main в старую версию:
git checkout release-v1.0 git cherry-pick abc123def # Хеш коммита с исправлением из main - Выборочное применение нескольких коммитов:
git cherry-pick abc123 def456 ghi789 - Перенос коммита без немедленного коммита (для редактирования):
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>
А применяется это чудо вот в каких случаях, ёпта:
- Срочный фикс из
mainв старую версию засунуть надо.git checkout release-v1.0 git cherry-pick abc123def # Вот этот самый спасительный коммит из main - Несколько коммитов подряд, но не все подряд.
git cherry-pick abc123 def456 ghi789 - Перенести, но не коммитить сразу — вдруг подправить что.
git cherry-pick -n <commit-hash> # Изменения просто в рабочую директорию скинет
А теперь, чувак, блядь, держи ухо востро — нюансы-то какие!
- Конфликты: Ага, щас! Могут вылезти, как гланды при ангине. Разрулил их — делай
git cherry-pick --continueи не парься. - Хеш новый: Даже если изменения один в один, коммит-то будет новый, с другим SHA-1. История, блядь, нелинейная получается.
- Зависимости: А если этот коммит на плечах у предыдущих стоит, которых у тебя в ветке нет? Вот тут и начнётся веселье, ошибки посыпятся.
- История: Если этим делом злоупотреблять, как мартышка бананами, история репозитория превратится в ёбучую паутину. Лучше для точечных исправлений, а не для целых фич таскать.
Обдристался? Ничего страшного: git cherry-pick --abort, и все твои начинания накрылись медным тазом. Как будто ничего и не было.