← Назад к вопросам

В чем разница между stash и stage?

1.8 Middle🔥 203 комментариев
#Инструменты тестирования

Комментарии (3)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Разница между Git Stash и Git Stage (Stage Area)

В Git, stash и stage (или stage area, также известная как index) — это два фундаментально разных механизма, предназначенных для решения различных задач в процессе работы с версиями. Основное различие заключается в их цели, времени жизни и влиянии на рабочее дерево.

1. Git Stage (Stage Area / Индекс)

Stage area (или просто stage) — это промежуточная область между вашим working directory (рабочим деревом) и repository (репозиторием). Это ключевое понятие в трехступенчатой модели Git: working directory → stage (index) → repository.

  • Цель: Подготовить изменения для следующего коммита. Вы "промежуточно" фиксируете изменения, которые хотите включить в коммит.
  • Команды: Основные команды для работы с stage — git add (добавить изменения в stage) и git reset (убрать изменения из stage).
  • Время жизни: Stage существует постоянно как часть структуры Git. Она очищается после создания нового коммита (коммит включает изменения из stage).
  • Влияние на рабочее дерево: Изменения, добавленные в stage, всегда остаются в рабочем дереве. Они не удаляются и не скрываются.
# Пример работы с stage (index):
# 1. Изменяем файл в рабочем дереве.
echo "New content" >> file.txt
# 2. Добавляем это изменение в stage area.
git add file.txt
# 3. Проверяем статус: изменение теперь в stage (готово к коммиту).
git status
# 4. Создаем коммит, который фиксирует состояние stage.
git commit -m "Add new content"

2. Git Stash

Stash — это временное хранилище, которое позволяет вам отложить незавершенные изменения из рабочего дерева и stage, чтобы очистить текущее состояние проекта для других операций (например, переключения ветки или слияния).

  • Цель: Временно сохранить незафиксированные изменения (из рабочего дерева и stage), чтобы работать с "чистым" состоянием репозитория, а затем вернуть эти изменения позже.
  • Команды: Основные команды — git stash (сохранить изменения в stash), git stash pop или git stash apply (вернуть изменения из stash), git stash list (показать список stash).
  • Время жизни: Stash — это временное хранилище, которое существует как специальный набор коммитов в репозитории. Stash записи можно удалять (git stash drop) или очищать (git stash clear).
  • Влияние на рабочее дерево: При выполнении git stash текущие незафиксированные изменения удаляются из рабочего дерева и stage, делая рабочее дерево чистым (состоящим из последнего коммита). При возвращении (pop или apply) изменения восстанавливаются в рабочее дерево.
# Пример работы с stash:
# 1. Вы работаете на ветке feature, но вам нужно быстро переключиться на main для исправления бага.
# 2. У вас есть незавершенные изменения (не в stage или частично в stage).
git status # Показывает измененные файлы.
# 3. Вы временно сохраняете все изменения в stash.
git stash
# 4. Ваше рабочее дерево теперь чистое. Вы можете свободно переключать ветки.
git checkout main
# ... выполняете работу на main ...
# 5. Возвращаетесь к своей предыдущей работе на ветке feature.
git checkout feature
# 6. Возвращаете отложенные изменения из stash в рабочее дерево.
git stash pop

Ключевые различия в таблице

КритерийGit Stage (Index)Git Stash
Основная цельПодготовить изменения для следующего коммита.Временно отложить незавершенные изменения для очистки рабочего дерева.
Место в модели GitПромежуточная область (working directory → stage → repository).Временное хранилище вне обычного потока (набор "stash коммитов").
Состояние изменений после операцииИзменения остаются в рабочем дереве.Изменения удаляются из рабочего дерева (до возврата из stash).
Влияние на историю коммитовНе влияет напрямую. Stage — это подготовка к коммиту.Не влияет на основную историю. Stash коммиты существуют отдельно.
Часто используемые командыgit add, git reset, git diff --stagedgit stash, git stash pop, git stash list, git stash drop
Аналог в человеческом процессеВыбрать и разложить на стол документы, которые вы готовите для отправки (коммита).Убрать все текущие незавершенные документы со стола в папку, чтобы освободить пространство для другой задачи.

Когда что использовать?

  • Используйте git add (stage) постоянно в процессе работы, чтобы постепенно формировать следующий коммит. Это стандартный рабочий процесс.
  • Используйте git stash в ситуациях, когда вам нужно:
    *   Переключиться на другую ветку, но у вас есть незавершенные изменения в текущей.
    *   Внести горячее исправление (hotfix) в основную ветку, не завершая текущую работу.
    *   Очистить рабочее дерево для выполнения операций, требующих чистого состояния (например, тестирования слияния).
    *   Применить изменения из stash к другой ветке (например, перенести наработки).

Важно: Stash по умолчанию включает изменения как из рабочего дерева, так и из stage. Команда git stash --keep-index позволяет сохранить в stash только изменения рабочего дерева, оставив изменения в stage на месте.

В чем разница между stash и stage? | PrepBro