Выборочное применение фиксаций
Узнайте, как выборочно применять отдельные фиксации одной ветки к другой с помощью `git cherry-pick`.
«Выборочное применение фиксаций» — бесплатный урок Git & GitHub Professional Workflow на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Git & GitHub Professional Workflow, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Git & GitHub Professional Workflow содержит 4 уроков всего.
Выборочное перемещение фиксаций
Что делать, если Вам нужно только одно конкретное изменение из ветки, а не вся ветка? git cherry-pick позволяет применить одну фиксацию из любого места истории репозитория непосредственно к текущей ветке.
Это похоже на то, как Вы срываете одну вишню с дерева! На текущей ветке создаётся совершенно новая фиксация, дублирующая изменения исходной.
Когда использовать cherry-pick
Представьте, что Вы работаете над большой функциональной веткой и обнаруживаете, что созданное в ней важное исправление ошибки нужно также прямо сейчас внести в основную производственную ветку main. Вы пока не хотите объединять всю функциональную ветку.
Это идеальный случай для cherry-pick. Команда помогает перенести отдельные изменения, не добавляя несвязанную работу.
Основная команда
Основная команда проста: git cherry-pick <commit-hash>.
- Сначала убедитесь, что Вы находитесь в ветке, куда хотите применить фиксацию.
- Затем найдите уникальный идентификатор (хеш) нужной фиксации.
- После этого Git создаст в текущей ветке новую фиксацию с теми же изменениями.
git cherry-pick <commit-hash>Поиск хешей фиксаций
Для cherry-pick нужен хеш! Найти его можно с помощью git log.
Параметр --oneline особенно полезен для краткого просмотра:
git log --onelineПодготовка сценария cherry-pick
Подготовим простой сценарий. Создадим ветку main и ветку feature/login. В ветке feature/login создадим фиксацию, которую хотим перенести в main.
Мы хотим перенести фиксацию «HOTFIX» в main.
git init my_project
cd my_project
echo "Initial content" > file.txt
git add file.txt
git commit -m "Initial commit"
git branch feature/login
git checkout feature/login
echo "Login feature added" >> login.txt
git add login.txt
git commit -m "Add basic login feature"
echo "Fix: Login button style" >> style.css
git add style.css
git commit -m "HOTFIX: Fix login button styling"Выполнение cherry-pick
Теперь переключитесь обратно на ветку main и примените фиксацию «HOTFIX». Предположим, что хеш фиксации «HOTFIX: Fix login button styling» — abcdefg.
После выполнения команды в ветке main появится новая фиксация с теми же изменениями, что и в abcdefg. Используйте git log --oneline, чтобы увидеть её!
git checkout main
git cherry-pick abcdefgРазрешение конфликтов при cherry-pick
Как и при слиянии, cherry-pick может привести к конфликтам, если одни и те же строки кода были по-разному изменены в обеих историях.
- Git приостановит операцию и отметит конфликтующие файлы.
- Вручную разрешите конфликты в файлах.
- Добавьте разрешённые файлы в индекс с помощью
git add. - Завершите операцию командой
git cherry-pick --continue.
# After resolving conflicts in editor:
git add .
git cherry-pick --continueВыбор нескольких фиксаций
Можно выполнить cherry-pick сразу для нескольких фиксаций.
Чтобы выбрать диапазон фиксаций (от hashA до hashB, не включая последнюю):
git cherry-pick hashA..hashBКогда использовать (а когда не использовать)
Cherry-pick — мощный инструмент, но применять его нужно обдуманно.
- Подходит для: срочных исправлений и переноса небольших отдельных изменений между несвязанными ветками.
- Менее подходит для: регулярной интеграции больших наборов изменений: это может привести к дублированию фиксаций и усложнить чтение истории. Для полной интеграции веток лучше использовать слияние или перебазирование.
Быстрая проверка: назначение cherry-pick
В ветке feature/new-design есть фиксация, исправляющая критическую проблему со стилями. Вам нужно немедленно применить это исправление в ветке main, не объединяя всю функциональную ветку.
Повторение: целевые изменения
На этом уроке мы изучили git cherry-pick — полезную команду для применения определённых фиксаций к текущей ветке.
- Она создаёт в целевой ветке новую фиксацию с теми же изменениями.
- Она идеально подходит для срочных исправлений и переноса отдельных изменений.
- Вам понадобится хеш фиксации, который обычно находят с помощью
git log --oneline. - Будьте готовы разрешать конфликты, как и при слиянии.
Освоив cherry-pick, Вы получите точный контроль над историей проекта!
Часто задаваемые вопросы
Урок «Выборочное применение фиксаций» бесплатный?
Да — полный текст урока «Выборочное применение фиксаций» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Git & GitHub Professional Workflow, подпишись на CoddyKit PRO. Курс Git & GitHub Professional Workflow содержит 4 уроков всего.
Чему я научусь в уроке «Выборочное применение фиксаций»?
Узнайте, как выборочно применять отдельные фиксации одной ветки к другой с помощью `git cherry-pick`. Ты практикуешь Git & GitHub Professional Workflow с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Git & GitHub Professional Workflow?
Предыдущий опыт не требуется. Git & GitHub Professional Workflow на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Выборочное применение фиксаций»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Git & GitHub Professional Workflow?
Да. Каждый урок Git & GitHub Professional Workflow включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Ручное разрешение конфликтов слияния
- Интерактивное перебазирование истории
- Выборочное применение фиксаций
- Повторное использование разрешений конфликтов с Git Rerere