Что такое git stash и для чего он используется?

Ответ

Git stash — это команда для временного сохранения незакоммиченных изменений (как staged, так и unstaged) в рабочей директории. Это позволяет переключиться на другую ветку или задачу, не создавая промежуточных коммитов.

Основные команды:

# Сохранить текущие изменения с сообщением
git stash save "WIP: работа над функцией X"

# Показать список всех сохранённых stash'ей
git stash list

# Применить последний stash (не удаляя его из списка)
git stash apply

# Применить конкретный stash по индексу
git stash apply stash@{2}

# Применить и удалить последний stash из списка
git stash pop

# Удалить конкретный stash
git stash drop stash@{1}

# Очистить все stash'и
git stash clear

Ключевые особенности:

  • Изменения сохраняются в локальном хранилище Git (в директории .git)
  • Можно создавать несколько stash'ей с разными сообщениями
  • Stash не передаётся при пуше в удалённый репозиторий
  • Полезен при срочных правках в другой ветке или при необходимости "очистить" рабочую директорию для тестирования

Практический пример:

# Вы работаете над feature-веткой
# Появляется срочный баг в main

git stash                    # Сохраняем текущую работу
git checkout main            # Переключаемся на main
# Исправляем баг, коммитим, пушим
git checkout feature-branch  # Возвращаемся к своей работе
git stash pop                # Восстанавливаем сохранённые изменения

Ответ 18+ 🔞

О, глянь-ка на эту штуку — git stash! Это ж как волшебный чердак для твоего кода, куда можно на время свалить всю свою незаконченную хуйню, чтобы не мозолила глаза.

Представь: сидишь ты, такой, в своей ветке feature-вау, пишешь гениальный код. Вдруг — охуеть! — прилетает: «Срочно пофикси баг в main, всё горит!». А у тебя всё в рабочей директории перепахано, коммитить рано, бросать страшно. Вот тут-то наш спаситель и выручает.

Вот как этим чудом пользоваться:

# Запихнуть всё своё добро на чердак, да ещё и с бирочкой
git stash save "WIP: тут я изобретал вечный двигатель"

# Посмотреть, что у тебя там на чердаке валяется
git stash list

# Достать последнюю стопку обратно (но она на чердаке останется)
git stash apply

# Достать конкретную стопку, например, ту, что была две позиции назад
git stash apply stash@{2}

# Достать и сразу выкинуть пустую коробку с чердака — классика!
git stash pop

# Выкинуть нахуй какую-то одну старую стопку
git stash drop stash@{1}

# Устроить тотальную зачистку чердака. Осторожно, безвозвратно!
git stash clear

Важные нюансы, чтобы не обосраться:

  • Вся эта сокровищница живёт только у тебя локально, в твоей .git-директории. На удалённый репозиторий эту срань не зальёшь.
  • Можно накопировать овердохуища разных stash'ей, главное — подписывать, а то потом не разберёшь, где вечный двигатель, а где «пофиксил опечатку».
  • Идеально, когда нужно резко переключить контекст, а рабочую директорию сделать чистой, как попову совесть, для тестов или мержа.

Живая ситуация, как в кино:

# Ты в своей ветке, в процессе
# Прилетает: «ВСЁ ПАДАЕТ, НУЖЕН ТЫ!»

git stash                    # Швырнул всё в кучу и накрыл одеялом — порядок!
git checkout main            # Перепрыгнул на main, как циркач
# Тушишь пожар, коммитишь, пушишь — герой!
git checkout feature-вау     # Возвращаешься к своему гениальному детищу
git stash pop                # Вытряхиваешь из чердака обратно все свои наработки
# И продолжаешь, будто ничего и не было. Магия, ёпта!

Вот такая хитрая жопа — git stash. Не коммит, но и не потерянные изменения. Просто временная камера хранения для твоего кодового бардака. Пользуйся, не стесняйся!