9. Cherry-pick и Stash
Git: Машина времени - Cherry-pick и Stash
Заголовок раздела «Git: Машина времени - Cherry-pick и Stash»
Этот урок посвящен двум мощным инструментам Git: cherry-pick и stash. Они позволяют точечно переносить изменения и временно прятать незаконченные работы, делая процесс разработки более гибким и эффективным.
Cherry-pick: Выбираем лучшее
Заголовок раздела «Cherry-pick: Выбираем лучшее»Cherry-pick позволяет выбрать отдельные коммиты из одной ветки и применить их в другой. Это как взять спелые вишенки с одного дерева и пересадить их на другое.
Предположим, у нас есть две ветки: main и feature/bugfix. В feature/bugfix был сделан коммит, исправляющий важную ошибку, и нам нужно перенести это исправление в main до слияния всей ветки.
git checkout main
# Определяем SHA коммита, который нужно перенести (можно посмотреть в git log)# Например, SHA коммита: a1b2c3d4e5
# Выполняем cherry-pickgit cherry-pick a1b2c3d4e5
# Если возникли конфликты, разрешаем их и выполняем:# git add <измененные_файлы># git cherry-pick --continue
# Если нужно отменить cherry-pick:# git cherry-pick --abortПосле успешного cherry-pick коммит a1b2c3d4e5 будет применен к ветке main.
Stash: Прячем незаконченное
Заголовок раздела «Stash: Прячем незаконченное»Stash позволяет временно спрятать изменения в рабочей директории. Это как отложить незаконченную картину, чтобы заняться чем-то другим, а потом вернуться к ней позже.
Допустим, вы работаете над новой фичей, но внезапно нужно срочно исправить баг в другой ветке. Вы не хотите коммитить незаконченную работу, но и терять изменения тоже не хотите.
# Прячем изменения в stashgit stash
# Переключаемся на другую ветку для исправления багаgit checkout main
# Исправляем баг и делаем коммит# ...
# Возвращаемся к исходной веткеgit checkout feature/new-feature
# Возвращаем изменения из stashgit stash pop
# Если в stash несколько записей, можно указать, какую именно применить:# git stash pop stash@{2}
# Чтобы посмотреть список stash записей:# git stash list
# Чтобы удалить запись из stash:# git stash drop stash@{0}Команда git stash сохраняет изменения в специальном месте. git stash pop извлекает последние сохраненные изменения и применяет их к рабочей директории. git stash list позволяет посмотреть список всех сохраненных изменений.
Жизненный пример
Заголовок раздела «Жизненный пример»В больших проектах, например, при разработке веб-сайтов или мобильных приложений, cherry-pick часто используется для переноса исправлений безопасности или критических багфиксов из стабильных веток (например, release) в основную ветку разработки (develop или main).
Stash незаменим, когда нужно быстро переключиться между задачами, не коммитя незаконченный код. Например, разработчик работает над новой функцией, но появляется срочная задача – исправить критический баг. Он использует stash, чтобы сохранить текущую работу, исправляет баг в другой ветке, а затем возвращается к своей задаче, извлекая изменения из stash. Многие фреймворки (React, Angular, Vue) и библиотеки используют stash для организации рабочего процесса при контрибьюции.
Ключевые моменты
Заголовок раздела «Ключевые моменты»cherry-pickпозволяет переносить отдельные коммиты между ветками.stashпозволяет временно прятать изменения в рабочей директории.cherry-pickполезен для переноса исправлений в стабильные ветки.stashпомогает переключаться между задачами без коммита незаконченного кода.- Оба инструмента повышают гибкость и эффективность разработки.
Интерактивный пример
Заголовок раздела «Интерактивный пример»Визуализация cherry-pick и stash: