Git·19 вопросов

Как отменить git add (убрать файлы из индекса)?

Ответ

Если вы случайно добавили файлы в индекс через git add и хотите убрать их до коммита, есть несколько способов.

git restore --staged <файл> — современный способ (Git 2.23+). Убирает файл из индекса, но сохраняет изменения в рабочей директории. Например: git restore --staged index.html уберёт файл из staged, но изменения в файле останутся. Команда git restore --staged . убирает из индекса все файлы.

git reset HEAD <файл> — классический способ, работает во всех версиях Git. Делает то же самое: убирает файл из индекса, изменения остаются. git reset HEAD . убирает все файлы. Команда git reset (без аргументов) убирает из индекса всё.

git reset --soft HEAD~1 — если вы уже закоммитили, но хотите вернуть изменения в индекс (uncommit). Коммит отменяется, изменения остаются staged. git reset --mixed HEAD~1 (или просто git reset HEAD~

— отменяет коммит и убирает изменения из индекса (unstaged), но оставляет в рабочей директории.

Полный сброс: git reset --hard HEAD удаляет все изменения в рабочей директории и индексе — возвращает к состоянию последнего коммита. Используйте только если уверены, что изменения не нужны. Это необратимо (кроме через reflog).

Разница между состояниями: Modified — файл изменён, но не добавлен в индекс. Staged — файл добавлен через git add, готов к коммиту. Committed — изменения сохранены в коммите. git add переводит Modified → Staged. git restore --staged переводит Staged → Modified. git commit переводит Staged → Committed.

Практический сценарий: вы сделали git add . и поняли, что добавили .env случайно. Выполните git restore --staged .env — файл уберётся из индекса. Добавьте .env в .gitignore, чтобы избежать этого в будущем. Если уже закоммитили .env: git rm --cached .env, закоммитьте удаление, добавьте в .gitignore.

Полезен ли этот ответ?

Другие вопросы этой темы

Связанные вопросы из других тем