Железо и софт • 13.06.2026
Git выдает ошибку fatal Cannot save the current index state при stash как исправить
Срочно потребовалось переключиться на другую ветку проекта для исправления критического бага, но текущая рабочая директория в Git Bash на Windows 11 забита измененными файлами. Чтобы не делать грязный коммит, я попытался спрятать изменения во временное хранилище с помощью стандартной команды git stash. Однако терминал прервал сессию и выдал ошибку: fatal: Cannot save the current index state или пишет, что операция сохранения сташа завершилась неудачно. При этом часть файлов находится в режиме конфликта слияния после предыдущего пулла. Подскажите, почему Гит блокирует создание временного кармана для незакоммиченного кода и как очистить дерево репозитория без потери написанных строк?
Ответы (5)
Артем Ветка
Здорово! Ошибка создания сташа "Cannot save the current index state" почти всегда наступает по двум причинам, которые ломают логику индексации. Во-первых, у тебя в рабочей папке могут находиться новые, только что созданные файлы (Untracked files), о существовании которых Гит еще вообще ничего не знает — базовый сташ умеет прятать только те файлы, которые уже отслеживались репозиторием ранее. Во-вторых, этот сбой намертво происходит, если в кодовой базе висят неразрешенные маркеры конфликтов после неудачного автоматического слияния веток. Пока ты принудительно не завершишь слияние или не отменишь его, ядро Гита будет блокировать любые попытки сделать слепок текущей памяти проекта.
Марина Репо
Если в вашем репозитории нет активных конфликтов, но сташ все равно отказывается сохранять изменения, нужно заставить утилиту забрать в карман новые добавленные файлы. Сделайте это по шагам:
1. Откройте консоль Git Bash в корневом каталоге вашего текущего проекта.
2. Пропишите команду принудительного добавления всех новых объектов в общий индекс отслеживания: `git add .` и нажмите Enter.
3. Введите расширенную команду создания слепка сессии с флагом захвата всех неотслеживаемых элементов: `git stash -u` (или используйте полный ключ `git stash --include-untracked`).
4. Нажмите Enter. Консоль выведет сообщение о том, что рабочая директория успешно очищена и сохранена в стек под индексом stash@{0}.
5. Спокойно переключайтесь на нужную ветку командой `git checkout`, ваш незавершенный код теперь в полной безопасности.
Дмитрий Стек
Ребята, иногда эта критическая ошибка сигнализирует о том, что во время предыдущего коммита или закрытия среды разработки повредился сам бинарный файл индекса вашего локального репозитория, который лежит по пути `.git/index`. Программа пытается записать туда новые контрольные хэши изменений, натыкается на несовпадение контрольных сумм и аварийно завершает поток. Помогает полное зануление забаговавшегося кэша. Перейдите в скрытую папку `.git`, найдите файл `index` и удалите его в корзину. Вернитесь в консоль и введите команду `git reset` — Гит заново просканирует файлы на диске, соберет чистый рабочий индекс, и сташ сразу заработает.
Никита Консоль
Если причиной падения сташа является зависший конфликт мерджа, который вы не хотите разруливать прямо сейчас, необходимо принудительно вернуть дерево веток в исходное состояние по инструкции:
1. Проверьте текущий статус репозитория, введя команду: `git status`. Если там написано "You have unmerged paths", значит мы нашли корень зла.
2. Введите команду принудительной отмены текущей сессии слияния: `git merge --abort` и нажмите Enter.
3. Если вы делали rebase, выполните аналогичную команду отката: `git rebase --abort`.
4. Дерево коммитов вернется на шаг назад, очистив системные блокировки дескрипторов файлов.
5. Спокойно запускайте стандартный вызов `git stash`, теперь скрытое сохранение незакоммиченного кода пройдет без сучка и задоринки.
Роман Скрипт
Чтобы не мучиться с флагами конфигурации и очисткой битых индексов, когда горит рабочая задача, обойдите механизм сташа стандартным путем. Создайте прямо из текущего состояния кода новую временную ветку командой `git checkout -b temp-branch`, закоммитьте туда абсолютно все ваши измененные и новые файлы обычным вызовом `git commit -am "wip"`. Все ваши наработки зафиксируются в локальной истории этой временной ветки. После этого спокойно прыгайте на целевую ветку для фикса багов, а когда освободитесь — вернетесь в ветку temp, сбросите коммит командой `git reset HEAD~1` и продолжите писать код с того же места.