Как временно спрятать незакоммиченные изменения через git stash?
Работаю над фичей, всё в правках, и тут срочно надо переключиться на другую ветку чинить баг. Коммитить полуготовое не хочу. Как временно отложить изменения и потом вернуть? Слышал про git stash.
2 ответа
git stash — это «карман», куда можно временно спрятать незакоммиченные изменения и вернуться к чистой рабочей папке.
Спрятать текущие правки:
git stash
Все незакоммиченные изменения уберутся «в карман», рабочая папка станет как в последнем коммите. Теперь можно спокойно переключиться на другую ветку, починить баг, закоммитить.
Вернуть спрятанное обратно:
git stash pop
Это достанет изменения из кармана и удалит их из стэша. Если хочешь достать, но оставить копию в стэше — используй git stash apply.
Посмотреть, что лежит в стэше (их может быть несколько):
git stash list
Полезно дать стэшу имя, чтобы потом не путаться:
git stash push -m "половина формы логина"
Важный нюанс: обычный git stash по умолчанию не прячет новые (untracked) файлы — те, что ты ещё не добавлял через git add. Чтобы спрятать и их, добавь флаг -u:
git stash -u
Частая ошибка: спрятать изменения, наделать новых дел, забыть про стэш — а потом удивляться, куда делся код. Возьми за правило после переключения проверять git stash list. И не делай слишком много стэшей подряд — легко запутаться, какой из них какой.
Краткая памятка по stash:
git stash— спрятать правки.git stash -u— спрятать вместе с новыми файлами.git stash pop— вернуть и удалить из стэша.git stash apply— вернуть, но оставить в стэше.git stash list— что лежит в кармане.git stash drop— выбросить ненужный стэш.
Альтернатива стэшу — просто сделать временный коммит «WIP» и потом откатить его через git reset --soft HEAD~1. Кому что удобнее.