Ответ
git cherry-pick – это команда, которая применяет изменения, внесенные в указанном коммите, к текущей ветке, создавая новый коммит с таким же набором изменений, но другим хэшем.
Основное назначение: Перенести одно или несколько конкретных изменений из одной ветки в другую без слияния всей истории ветки.
Типичный сценарий использования:
- В ветке
feature/loginбыл сделан важный фикс бага в коммитеabc123. - Вам нужно срочно применить этот фикс в ветке
main, не дожидаясь полного слияния всей функциональностиfeature/login.
Практический пример:
# 1. Переключиться на целевую ветку
git checkout main
# 2. Найти хэш нужного коммита в исходной ветке
git log feature/login --oneline
# abc123 Fix null pointer in user validation
# def456 Add new login UI
# 3. Применить ("скопировать") изменения из коммита abc123 в текущую ветку (main)
git cherry-pick abc123
# Если конфликтов нет, будет создан новый коммит в main с теми же изменениями.
# 4. Можно применить несколько коммитов подряд (изменения применяются последовательно)
git cherry-pick abc123 def456
# 5. Отмена cherry-pick в случае конфликта или ошибки
git cherry-pick --abort
Преимущества:
- Точность: Позволяет выбрать только нужные изменения.
- Гибкость: Можно переносить коммиты в любом порядке, даже между несвязанными историями.
Недостатки и риски:
- Дублирование коммитов: Создает новый коммит, что может "размыть" историю.
- Конфликты: Высокая вероятность конфликтов, если изменения зависят от кода, отсутствующего в целевой ветке.
- Сложность отслеживания: Усложняет понимание того, откуда пришло изменение.
Рекомендация: Используйте cherry-pick экономно, в основном для горячих фиксов или переноса изолированных патчей. Для регулярного переноса изменений предпочтительнее merge или rebase.