Продвинутый Git
1rebase: линейная история2stash: прячем незавершённую работу← вы здесь3reset и revert: отменяем изменения
Урок 2~12 минут

stash: прячем незавершённую работу

Ты работаешь над фичей — и тут прилетает срочный баг. Коммитить незаконченное не хочется. Именно для этого git stash.

Как работает stash

bash
git stash          # спрятать все изменения (staged + unstaged)
git stash pop      # достать последний, удалить из стека

Stash — это стек (LIFO). Каждый git stash кладёт запись сверху:

stash@{0}: WIP on main: feat: черновик      ← последний
stash@{1}: WIP on main: fix: другая задача
stash@{2}: WIP on feature: старая работа

Попробуй в симуляции

Нажми «git stash» — файлы исчезнут в стеке. Потом «pop» — вернутся. Кликни на незменённый файл чтобы его «изменить».

Именованные stash

bash
git stash push -m "feat: черновик авторизации"

Без названия все stash выглядят одинаково — сложно вспомнить что внутри. Называй их по задаче.

Частичный stash

bash
git stash push auth.js       # только один файл
git stash push -p            # выбрать изменения интерактивно

Полезно когда одна часть изменений готова к коммиту, другая — нет.

Управление стеком

bash
git stash list                    # список всех stash
git stash show stash@{1}          # что в конкретном stash
git stash apply stash@{1}         # применить, не удалять из стека
git stash drop stash@{0}          # удалить конкретный stash
git stash clear                   # удалить все stash

apply vs pop:

  • pop — достать и удалить из стека
  • apply — достать и оставить в стеке (можно применить повторно или на другой ветке)

Stash и ветки

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

bash
git switch main
git stash          # прячем
 
git switch feature
git stash pop      # достаём на другой ветке

Или создать новую ветку прямо из stash:

bash
git stash branch feature/new-idea stash@{0}
# создаёт ветку + применяет stash + удаляет его

Типичный сценарий

bash
# Работаешь над фичей...
git stash push -m "feat: WIP авторизация"
 
# Переключаешься на hotfix
git switch main
git switch -c hotfix/critical-bug
# ...фиксишь баг...
git commit -m "fix: критический баг"
git push
 
# Возвращаешься к своей работе
git switch feature/auth
git stash pop

Команды

bash
git stash                          # спрятать
git stash push -m "название"       # с именем
git stash push файл                # конкретный файл
git stash list                     # список
git stash pop                      # достать последний
git stash apply stash@{N}          # применить конкретный
git stash drop stash@{N}           # удалить конкретный
git stash branch имя-ветки         # создать ветку из stash
git stash clear                    # удалить всё
stash — это карман. Бросаешь туда незаконченную работу, делаешь срочный фикс, достаёшь обратно.
📦
git stash — прячем изменения
Working Directory
🔐auth.jsM
🗺routes.jsM
📝README.md
2 файл(а) изменено
Stash Stack
пусто
Кликни на файл без M → изменить
🎯
Миссия 1 из 4
Какая команда прячет все незакоммиченные изменения?