Ответ
git stash используется для временного сохранения незакоммиченных изменений (как в рабочей директории, так и в индексе) без создания нового коммита. Это позволяет быстро очистить рабочую директорию, чтобы переключиться на другую ветку или выполнить другие операции, а затем вернуться к прерванной работе.
Основные сценарии использования git stash:
- Смена контекста: Вам нужно срочно переключиться на другую ветку (например, для исправления бага или проверки чужого кода), но текущие изменения ещё не готовы для коммита.
git stashсохраняет их, позволяя безопасно переключиться. - Обновление ветки: Перед выполнением
git pullилиgit rebaseна текущей ветке, чтобы избежать конфликтов с незакоммиченными локальными изменениями. После обновления можно применить stash обратно. - Эксперименты: Вы хотите попробовать новую идею или внести временные изменения, не загрязняя историю коммитов.
git stashпозволяет сохранить текущее состояние, провести эксперимент, а затем либо применить stash, либо отбросить его. - Очистка рабочей директории: Если вы хотите временно убрать все локальные изменения, чтобы начать с чистого листа, но не хотите их терять.
Примеры команд:
- Сохранить изменения в stash:
git stash save "WIP: Feature X" # С сообщением git stash # Без сообщения - Просмотреть список stash'ей:
git stash list - Применить последний stash и удалить его из списка (
pop):git stash pop - Применить последний stash, но оставить его в списке (
apply):git stash apply - Применить конкретный stash (например,
stash@{1}):git stash apply stash@{1} - Удалить последний stash:
git stash drop
Важное замечание: По умолчанию git stash не сохраняет неотслеживаемые файлы (untracked files) и игнорируемые файлы (ignored files). Чтобы включить неотслеживаемые файлы, используйте флаг -u или --include-untracked:
git stash -u Ответ 18+ 🔞
А, слушай, про эту вашу git stash! Ну, это ж как такая волшебная тумбочка, куда можно нахуй всё свалить, когда начальник (или твой же собственный мозг) требует срочно переключиться на другую задачу.
Представь: сидишь ты, такой, в коде по уши, всё уже почти работает, но выглядит как пиздец. И тут — бац! — надо срочно перебежать в другую ветку, баг пофиксить. Коммитить эту недоделанную хуйню нельзя, а терять — жалко. Вот тут-то и выручает git stash, ёпта!
Короче, зачем это нужно:
- Срочно переключиться: Твой тимлид орёт, что в
masterвсё горит, а у тебя в рабочей директории — творческий бардак.git stash— и рабочая папка чиста, как слеза младенца. Переключился, всё починил, вернулся —git stash pop, и твой бардак снова на месте, будто ничего и не было. Магия, блядь! - Обновиться без боли: Хочешь стянуть свежие изменения (
git pull), но твои правки ещё не готовы. Если потянешь — будут конфликты, пиздец и ругань. Просто сделайstash, обнови ветку, потом верни свои правки обратно. Всё чисто. - Поэкспериментировать: Хочется попробовать какую-то дикую идею, но страшно всё сломать. Засейвил текущее состояние в stash, натворил дел. Если эксперимент провалился — просто выкинул stash и вернулся к исходнику. Если удался — ну, там видно будет.
Как этим пользоваться, чтобы не обосраться:
- Быстро всё спрятать:
git stash save "Тут я пытался починить авторизацию, но нихуя" # С пояснением, а то потом забудешь git stash # Или просто так, по-быстрому - Посмотреть, что там уже назапасли:
git stash listВыведет что-то вроде
stash@{0}: On main: Тут я пытался.... Нумерованные, блядь, сейфы! - Достать последнюю заначку и выкинуть пустую коробку (
pop):git stash pop - Достать, но коробку оставить — вдруг ещё пригодится (
apply):git stash apply - Достать конкретную заначку (например, позавчерашнюю):
git stash apply stash@{1} - Выкинуть нахуй последний stash, если он не нужен:
git stash drop
Важный нюанс, про который все забывают, а потом охуевают: По умолчанию эта команда игнорирует новые, неотслеживаемые файлы (untracked). То есть если ты создал super_secret_test.py и не добавил его в git, то git stash его проигнорит, и он так и останется болтаться. Чтобы спрятать ВСЁ, включая этот файл, надо крикнуть:
git stash -u
Вот тогда уж точно ничего не потеряется. Ну, почти точно.