Перейти к содержимому

9. Cherry-pick и Stash

Иллюстрация к уроку Этот урок посвящен двум мощным инструментам Git: cherry-pick и stash. Они позволяют точечно переносить изменения и временно прятать незаконченные работы, делая процесс разработки более гибким и эффективным.

Cherry-pick позволяет выбрать отдельные коммиты из одной ветки и применить их в другой. Это как взять спелые вишенки с одного дерева и пересадить их на другое.

Предположим, у нас есть две ветки: main и feature/bugfix. В feature/bugfix был сделан коммит, исправляющий важную ошибку, и нам нужно перенести это исправление в main до слияния всей ветки.

Окно терминала
git checkout main
# Определяем SHA коммита, который нужно перенести (можно посмотреть в git log)
# Например, SHA коммита: a1b2c3d4e5
# Выполняем cherry-pick
git cherry-pick a1b2c3d4e5
# Если возникли конфликты, разрешаем их и выполняем:
# git add <измененные_файлы>
# git cherry-pick --continue
# Если нужно отменить cherry-pick:
# git cherry-pick --abort

После успешного cherry-pick коммит a1b2c3d4e5 будет применен к ветке main.

Stash позволяет временно спрятать изменения в рабочей директории. Это как отложить незаконченную картину, чтобы заняться чем-то другим, а потом вернуться к ней позже.

Допустим, вы работаете над новой фичей, но внезапно нужно срочно исправить баг в другой ветке. Вы не хотите коммитить незаконченную работу, но и терять изменения тоже не хотите.

Окно терминала
# Прячем изменения в stash
git stash
# Переключаемся на другую ветку для исправления бага
git checkout main
# Исправляем баг и делаем коммит
# ...
# Возвращаемся к исходной ветке
git checkout feature/new-feature
# Возвращаем изменения из stash
git 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: