git stash — Более чем просто сохранение при панике (частичные стэш, именованные стэш и остальное)
Помимо срочного сохранения: именованные стэш-файлы, список стэш-файлов, показ -p, частичный стэш с помощью --patch, применение против pop и проблема с неотслеживаемыми файлами, с которой вы столкнётесь в конечном итоге.
Вы изучили git stash в панике. Кто-то отправил вам уведомление в процессе разработки, вам нужно было немедленно переключиться на другую ветку, и стэш был самым быстрым способом выхода. Сохранил день.
Затем у вас было три стэша, вы забыли, что в них было, вы случайно выбрали неправильный стэш и неправильную ветку, и решили, что стэш сломан. Он не сломан. Вам просто нужно изучить несколько дополнительных команд.
Полученные неотслеживаемые файлы (сначала прочитайте это)
git stash сохраняют только отслеживаемые файлы — файлы, уже известные git. Новые файлы, которые вы еще не подготовили к коммиту, не видны для git.
# You created a new file mid-feature
echo "temp work" > new-feature.js
git stash
# new-feature.js is still sitting there — stash ignored it entirely
Добавить -u для включения неотслеживаемых файлов:
git stash push -u
Также есть -a (--all), который включает игнорируемые файлы. Это почти никогда не то, что вы хотите — он будет сохранять ваши node_modules изменения и .env файлы и сделает восстановление мучительным.
Называйте стэши до того, как пожалеете
По умолчанию сообщение стэша:
stash@{0}: WIP on main: a3f1c2d Update dependencies
Это бессмысленно, когда у вас есть три стэша из трех разных незавершенных функций. Используйте git stash push -m для названия:
git stash push -u -m "wip: oauth token refresh flow"
git stash push -u -m "experiment: lazy load images on scroll"
git stash push -u -m "fix: header z-index issue"
Сейчас git stash list на самом деле читаемо:
stash@{0}: On main: fix: header z-index issue
stash@{1}: On feature/images: experiment: lazy load images on scroll
stash@{2}: On feature/auth: wip: oauth token refresh flow
Применяйте конкретный стэш по индексу:
git stash apply stash@{2} # brings back the auth work
Проверяйте перед применением: stash show -p
git stash show предоставляет обзор изменённых файлов. Добавьте -p для полного сравнения:
git stash show -p stash@{2}
Эта команда чаще всего пропускается и затем жалеется. Без неё вы восстанавливаете изменения на ветке, которая могла значительно измениться с момента того, как вы сохранили стэш. Быстрое show -p занимает десять секунд и сообщает вам точно, что вы собираетесь применить.
Если вы хотите сравнить разницу стэша с текущим состоянием файла в режиме «сторона к стороне», вставьте оба в Текст Сравнить инструмент — быстрее, чем в уме. git diff stash@{N}..HEAD -- path/to/file применение против pop: один важный различие
Обе команды восстанавливают ваш стэш. Один критический момент:
= применение + удаление записи стэша
git stash pop= применение, сохранение записи стэшаgit stash applyЕсли вы
и столкнулись с конфликтом слияния, git удаляет запись стэша до того, как вы не решите проблему. Теперь у вас есть конфликтующий рабочий каталог и нет ссылки на стэш, чтобы вернуться. pop сохраняет запись, пока вы решаете конфликт, затем вы удаляете вручную:
apply Дополнительный
# Safer workflow when conflicts are possible
git stash apply stash@{0}
# resolve any conflicts
git stash drop stash@{0} # explicit cleanup once you're happy
шаг оправдан, когда стэш представляет собой несколько часов работы. drop Частичный стэш с —patch
Иногда вы хотите сохранить только часть изменений. У вас есть исправление ошибки и половина новой функции в одном файле, и вы хотите коммитить исправление, сохраняя код функции.
) открывает интерактивную сессию по кусочкам:
git stash push --patch (или -pДля каждого кусочка вы получаете тот же интерфейс, что и
git stash push -p -m "wip: new feature half"
. Введите y/n/s/q чтобы разбить кусочек на более мелкие части, если автоматическое разбиение git не достаточно детализировано. Это медленнее, чем простой стэш, но это самый чистый способ разбить загрязнённый рабочий каталог без создания временной ветки. git add -pОдно ограничение: s режим не включает неотслеживаемые файлы, поэтому вы не можете комбинировать его с
. Если у вас есть новые неотслеживаемые файлы, которые являются частью функции, которую вы сохраняете, вам нужно сначала --patch их, чтобы они стали отслеживаемыми, затем запустите частичный стэш. -uРеальные случаи использования git add Переключение контекста в процессе разработки функции.
Ревьюер оставляет срочную обратную связь по другой ветке, пока вы глубоко погружены в незавершённый код. Сохраните стэш с именем, переключитесь на ветку, выполните ревью, вернитесь и восстановите. Без WIP коммитов, без сложных манёвров с ветками.
Проверка чистого запуска тестов. Вы хотите убедиться, что тесты проходят на чистом рабочем каталоге — а не с незавершёнными изменениями, которые случайно проникают в среду тестирования:
git stash push -u -m "wip: refactor auth middleware"
git checkout fix/urgent-prod-bug
# ... review and fix ...
git checkout feature/auth-refactor
git stash pop
Это выявляет случай, когда тесты проходят только из-за локальных изменений. Это происходит чаще, чем вы думаете, в репозиториях с общими тестовыми фиксами. Переключение веток с конфликтным загрязнённым рабочим каталогом.
git stash push -u
npm test # or pytest, cargo test, whatever
git stash pop
Git отказывается проверять ветку, если в вашем рабочем каталоге есть изменения, которые будут перезаписаны. Сохраните сначала, переключитесь, восстановите. Быстрее, чем
просто для перемещения веток. таблица хитростей git stash git commit --fixup Сохранить отслеживаемые изменения (сокращение:
Включить неотслеживаемые файлы
| Команда | Что делает |
|---|---|
git stash push | Сохранить с описательным именем git stash) |
git stash push -u | Неотслеживаемые + с именем (комбинация, которую вы будете использовать чаще всего) |
git stash push -m "name" | Интерактивный частичный стэш (по кусочкам) |
git stash push -u -m "name" | Список всех стэшей |
git stash push -p | Обзор изменённых файлов в стэше |
git stash list | Полное сравнение стэша |
git stash show stash@{N} | Применить стэш, сохранить запись |
git stash show -p stash@{N} | Применить самый свежий стэш, удалить запись |
git stash apply stash@{N} | Удалить конкретную запись стэша |
git stash pop | Удалить все записи стэша |
git stash drop stash@{N} | Создать новую ветку из стэша и применить её |
git stash clear | Эвакуация ветки стэша |
git stash branch <branchname> | Одна из дополнительных команд, которую стоит знать: |
. Эта команда создаёт новую ветку на коммите, где вы сохранили стэш, применяет стэш и удаляет его, если применение чистое. Это правильный выбор, когда ваши сохранённые изменения стали слишком большими, чтобы они заслуживали собственную ветку — и она полностью избегает проблем с конфликтами, потому что вы переписываете стэш на точной ветке, с которой он был создан.
Привычка, которая решает 90% боли от стэша: называйте всё с помощью git stash branch <branchname>, и используйте
до тех пор, пока вы не уверены, что изменения интегрировались чисто. Дополнительный -mшаг стоит двух секунд. Потеря стэша, который вам нужен, стоит намного больше. apply вместо pop git stash — Более чем просто спасение от паники (частичный стэш, именованные стэши и остальное) 2 drop git stash — Более чем просто спасение от паники (частичный стэш, именованные стэши и остальное) 1
Вам также может понравиться
Установите наши расширения
Добавьте инструменты ввода-вывода в свой любимый браузер для мгновенного доступа и более быстрого поиска
恵 Табло результатов прибыло!
Табло результатов — это интересный способ следить за вашими играми, все данные хранятся в вашем браузере. Скоро появятся новые функции!
Подписаться на новости
все Новые поступления
всеОбновлять: Наш последний инструмент было добавлено 15 Июня 2026
