Как отменить git add и убрать файл из индекса?
Случайно сделал git add . и добавил в индекс лишний файл, который не хотел коммитить. Как убрать файл из staged, не теряя изменения в нём? Ищу «как отменить git add».
2 ответа
Тебе нужно разстейджить файл — убрать из индекса, но сохранить правки в нём.
Современный способ (git 2.23+):
git restore --staged лишний_файл.txt
Классический способ, который работает на всех версиях:
git reset лишний_файл.txt
или подробнее git reset HEAD лишний_файл.txt. Обе команды уберут файл из «Changes to be committed», но сами изменения в файле останутся — он просто вернётся в «не staged».
Если надо убрать из индекса сразу всё, что наadd'ил:
git reset
(без указания файла — разстейджит всё, изменения тоже остаются).
Кстати, сам git подсказывает это: после git add команда git status пишет «use git restore --staged <file>... to unstage».
Частая ошибка: перепутать с git reset --hard или git restore лишний_файл (без --staged). Эти команды удалят изменения в файле! Чтобы только убрать из индекса, но СОХРАНИТЬ правки — обязательно используй git reset файл или git restore --staged файл. Флаг --staged тут ключевой.
Держи разницу в одной табличке:
git restore --staged файл→ убрать из индекса, изменения остаются.git restore файл→ выбросить изменения в файле (вернуть к коммиту).git reset файл→ то же, что первое (классический вид).
Для отмены git add бери варианты со словом staged или просто git reset файл. Без --staged рискуешь потерять правки.