Gernar
Frontend DeveloperGit, сборка и DevOps

Интервью-вопрос

Что такое git stash

git stash временно сохраняет локальные незакоммиченные изменения, чтобы вы могли переключиться на другую ветку или задачу. Главное на интервью: сказать, что именно сохраняется, чем отличаются apply и pop, и почему stash не заменяет нормальные коммиты.

Добавлен
Редакция

Подготовьте короткий ответ и пару деталей на случай уточняющих вопросов.

🐰0
🥚0

Мини-квиз

Проверка перед разбором

Несколько быстрых вопросов перед разбором. Так проще поймать места, которые только кажутся понятными.

Вопрос 1 из 50 правильно

Как лучше сказать, зачем нужен git stash?

Вы объясняете команду коротко на интервью.

Варианты ответа

Разбор

Разобраться, а не зазубрить

Дальше разбираем суть, типичные уточнения и места, где легко сказать лишнее или перепутать термины.

Базовая идея

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 хорош для короткого переключения. Для хранения важной работы на неопределенный срок он подходит плохо.

Как выбрать подход

1Нужно срочно переключиться, а текущая работа еще не готова к коммиту?
Используйте git stash push -m с понятным сообщением.
2Есть новые файлы, которые еще не отслеживаются Git?
Добавьте -u, иначе эти файлы останутся в рабочей директории.
3Нужно проверить результат без риска потерять запись?
Начните с git stash apply, а не с git stash pop.
4Правки нужны надолго или их надо показать команде?
Сделайте отдельную ветку и WIP-коммит вместо stash.
5После применения изменились UI, стили или клиентский контракт API?
Проверьте экран вручную и запустите нужные тесты, чтобы не оставить скрытую смесь задач.

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. 1Проверить git status
  2. 2Сохранить stash с сообщением
  3. 3Переключиться на нужную ветку
  4. 4Вернуться и применить конкретную запись
  5. 5Проверить конфликты, тесты и UI
Опасный сценарий
  1. 1Сделать git stash без понимания, что сохранится
  2. 2Накопить несколько записей без сообщений
  3. 3Выполнить git stash pop вслепую
  4. 4Не заметить конфликты или пропавшие новые файлы
  5. 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. 1

    Думать, что stash сохраняет все

    Обычный git stash не сохраняет untracked файлы. Во frontend-задаче это может быть новый компонент, тест или файл стилей. Он останется в рабочей директории и помешает переключению ветки. Если нужны новые файлы, используйте git stash -u.

  2. 2

    Использовать pop вслепую

    git stash pop сразу пытается применить запись и удалить ее после успешного применения. Если вы выбрали не тот stash, можно смешать изменения из разных задач и получить лишние конфликты. Безопаснее сначала посмотреть git stash list и применить нужную запись через apply.

  3. 3

    Хранить долгую работу только в stash

    Stash живет локально и плохо показывает историю намерений. Если задача растянулась, лучше сделать ветку и WIP-коммит. Его можно переписать перед merge. Так вы не потеряете работу при чистке stash и сможете показать изменения команде.

  4. 4

    Не давать stash понятное имя

    Несколько записей вида WIP on feature быстро становятся неразличимыми. Используйте git stash push -m, чтобы через день понять, где правки формы, где фикс сборки, а где эксперимент. Это снижает риск применить не тот набор изменений.

  5. 5

    Применять stash на чужой контекст без проверки

    Stash можно применить на другой ветке, но файлы могли измениться. Тогда Git попросит решать конфликты. Иногда конфликтов не будет, но UI получит смесь старой разметки, новых стилей или другого контракта API. Перед применением проверьте ветку и статус, используйте apply, затем прогоните нужные проверки и быстро откройте затронутый экран.

Follow-up

Что могут спросить дальше

Короткие ответы на вопросы, которыми интервьюер проверяет, умеете ли вы безопасно работать со stash в реальном Git-flow.

Живые ответы

Видео с похожим вопросом

Если найдем публичные интервью с таким вопросом, добавим их сюда. Их удобно смотреть после теории, чтобы свериться с живыми ответами.

Пока видео нет. Когда появятся подходящие публичные интервью, добавим их в этот блок, чтобы можно было сравнить разбор с тем, как отвечают реальные кандидаты.

Содержание