Интервью-вопрос
Что такое git stash
git stash временно сохраняет локальные незакоммиченные изменения, чтобы вы могли переключиться на другую ветку или задачу. Главное на интервью: сказать, что именно сохраняется, чем отличаются apply и pop, и почему stash не заменяет нормальные коммиты.
- Добавлен
- Редакция
Подготовьте короткий ответ и пару деталей на случай уточняющих вопросов.
Мини-квиз
Проверка перед разбором
Несколько быстрых вопросов перед разбором. Так проще поймать места, которые только кажутся понятными.
Вопрос 1 из 50 правильно
Разбор
Разобраться, а не зазубрить
Дальше разбираем суть, типичные уточнения и места, где легко сказать лишнее или перепутать термины.
Базовая идея
git stash нужен в очень обычной рабочей ситуации. У вас есть незавершенные локальные правки, но прямо сейчас нужно получить чистое рабочее дерево. Например, вы делаете форму на React, затем прилетает срочный баг в другой ветке. Коммитить сырой код не хочется, а переключиться Git может не дать из-за конфликтующих файлов.
В этом месте stash сохраняет изменения во временную локальную запись и очищает рабочую директорию. Позже вы возвращаетесь и применяете эту запись обратно.
git status
git stash push -m "checkout form before hotfix"
git switch hotfix/payment
# исправили баг
git switch feature/checkout-form
git stash list
git stash apply stash@{0}Хороший короткий ответ: stash это не коммит и не отправка на сервер. Это локальный буфер для быстрого переключения контекста.
Что именно сохраняется
По умолчанию git stash сохраняет изменения в отслеживаемых файлах. Сюда входят изменения в рабочей директории и в индексе. То есть staged-правки тоже могут попасть в stash.
Важная ловушка: новые файлы, которые Git еще не отслеживает, по умолчанию не сохраняются. Для них нужен флаг -u или полная форма --include-untracked.
# Сохранить изменения в отслеживаемых файлах
git stash push -m "temporary navbar changes"
# Сохранить еще и новые untracked файлы
git stash push -u -m "new modal files"Для frontend-разработки это не мелочь. Новый компонент, CSS-модуль, тест или mock-файл может остаться в рабочей директории, если вы забыли -u. В итоге переключение ветки не станет чистым. После возврата можно применить только часть правок и получить экран без нужного стиля, теста или вспомогательного модуля.
Как выбрать безопасное действие
На интервью полезно показать не только команду, но и критерий выбора. Stash хорош для короткого переключения. Для хранения важной работы на неопределенный срок он подходит плохо.
Как выбрать подход
Используйте git stash push -m с понятным сообщением.Добавьте -u, иначе эти файлы останутся в рабочей директории.Начните с git stash apply, а не с git stash pop.Сделайте отдельную ветку и WIP-коммит вместо stash.Проверьте экран вручную и запустите нужные тесты, чтобы не оставить скрытую смесь задач.apply и pop
git stash apply применяет сохраненные изменения, но оставляет запись в списке stash. Это удобно, если вы не уверены, что изменения лягут чисто, или хотите применить их еще раз в другой ветке.
git stash pop применяет изменения и удаляет запись после успешного применения. Если возникли конфликты, запись обычно остается в списке, но все равно не стоит использовать pop вслепую. Сначала проверьте, что применяете нужный stash и находитесь в нужной ветке.
git stash list
git stash apply stash@{1}
# если все хорошо и запись больше не нужна
git stash drop stash@{1}Формулировка для интервью может быть такой: если есть риск конфликта или я не уверен в записи, я предпочту apply, а потом удалю stash вручную.
Рабочий сценарий без потери контекста
Сильный ответ показывает порядок действий. В реальной задаче проблема обычно не в том, что команда забыта. Чаще вы сохранили что-то непонятное, применили не туда и получили смесь изменений.
- 1Проверить git status
- 2Сохранить stash с сообщением
- 3Переключиться на нужную ветку
- 4Вернуться и применить конкретную запись
- 5Проверить конфликты, тесты и UI
- 1Сделать git stash без понимания, что сохранится
- 2Накопить несколько записей без сообщений
- 3Выполнить git stash pop вслепую
- 4Не заметить конфликты или пропавшие новые файлы
- 5Потерять время на восстановление контекста
Плохой вариант выглядит так:
git stash
git switch hotfix
# через день
git switch feature
git stash popЭто работает, пока у вас одна запись и свежий контекст в голове. Но если за день появилось несколько stash, вы легко примените не тот набор правок. Во frontend-задаче так можно незаметно смешать изменение состояния формы, стили и мок API из разных веток. Лучше дать записи имя, перед восстановлением посмотреть список и начать с apply.
git stash push -u -m "checkout form validation before hotfix"
git stash list
git stash apply stash@{0}Когда stash не лучший выбор
Stash не стоит считать универсальным решением. Если изменения важны, должны быть видны команде или могут понадобиться после перезагрузки контекста, безопаснее сделать ветку и WIP-коммит. Такой коммит можно потом поправить через rebase или squash перед pull request.
Еще один случай: вы хотите перенести изменения между ветками. Stash может помочь, но он не гарантирует бесконфликтное применение. Если файлы в ветках сильно разошлись, придется решать конфликты так же, как при merge или rebase.
Практический вывод
Ответ на интервью можно собрать в 3 части. Сначала назначение: временно сохранить незакоммиченные локальные изменения. Затем границы: по умолчанию не все файлы, для untracked нужен -u, для надежности стоит использовать сообщения. В конце риск: pop и применение на другую ветку могут привести к конфликтам или смешиванию задач. Поэтому перед восстановлением нужно смотреть список и статус.
Если вы добавите эту практическую часть, ответ прозвучит как опыт работы с Git, а не как пересказ справки по команде.
Частые ошибки
Где обычно ошибаются
Проверьте формулировки, которые звучат уверенно, но на интервью быстро выдают пробелы.
- 1
Думать, что stash сохраняет все
Обычный
git stashне сохраняет untracked файлы. Во frontend-задаче это может быть новый компонент, тест или файл стилей. Он останется в рабочей директории и помешает переключению ветки. Если нужны новые файлы, используйтеgit stash -u. - 2
Использовать pop вслепую
git stash popсразу пытается применить запись и удалить ее после успешного применения. Если вы выбрали не тот stash, можно смешать изменения из разных задач и получить лишние конфликты. Безопаснее сначала посмотретьgit stash listи применить нужную запись черезapply. - 3
Хранить долгую работу только в stash
Stash живет локально и плохо показывает историю намерений. Если задача растянулась, лучше сделать ветку и WIP-коммит. Его можно переписать перед merge. Так вы не потеряете работу при чистке stash и сможете показать изменения команде.
- 4
Не давать stash понятное имя
Несколько записей вида
WIP on featureбыстро становятся неразличимыми. Используйтеgit stash push -m, чтобы через день понять, где правки формы, где фикс сборки, а где эксперимент. Это снижает риск применить не тот набор изменений. - 5
Применять stash на чужой контекст без проверки
Stash можно применить на другой ветке, но файлы могли измениться. Тогда Git попросит решать конфликты. Иногда конфликтов не будет, но UI получит смесь старой разметки, новых стилей или другого контракта API. Перед применением проверьте ветку и статус, используйте
apply, затем прогоните нужные проверки и быстро откройте затронутый экран.
Follow-up
Что могут спросить дальше
Короткие ответы на вопросы, которыми интервьюер проверяет, умеете ли вы безопасно работать со stash в реальном Git-flow.
Живые ответы
Видео с похожим вопросом
Если найдем публичные интервью с таким вопросом, добавим их сюда. Их удобно смотреть после теории, чтобы свериться с живыми ответами.
Пока видео нет. Когда появятся подходящие публичные интервью, добавим их в этот блок, чтобы можно было сравнить разбор с тем, как отвечают реальные кандидаты.
Что такое CI/CD pipeline 😎
CI/CD pipeline автоматизирует сборку, проверки и доставку изменений. На странице разбираем, что сказать на интервью фронтенд-разработчику, какие этапы назвать и где чаще всего ошибаются.
Что используешь для сборки проекта 😎
В ответе важно назвать конкретный стек сборки, объяснить выбор и показать, как вы проверяете production build. Разбираем Vite, Webpack, code splitting, оптимизацию и CI без лишнего списка инструментов.