Исходя из комментариев , похоже, что в вашей версии Git может быть какая-то ошибка. Простое git reset
(без каких-либо аргументов) должно было бы устранить проблему, но на самом деле сначала нужно было удалить файл индекса, а затем выполнить сброс:
rm .git/index
git reset
Это git reset
будет перестройте индексный файл с нуля, теперь, когда он отсутствует. В этом нет необходимости. (Обратите внимание, что расположение индексного файла зависит от того, является ли это добавленное рабочее дерево из git worktree add
; в приведенном выше предположении это не так.)
( Одна из возможных возможных причин этого заключается в том, что Windows имеет режимы, в которых она не позволяет программе записывать в файл. 1 Но это должно отображаться как ошибка при запуске git reset
. предотвратить удаление файла, в этом случае rm .git/index
тоже не удастся. Так что совсем не ясно, что здесь происходит.)
Оригинальный ответ ниже.
1 Windows имеет так называемые «обязательные блокировки файлов». Программы не могут избежать этих блокировок. Linux обычно имеет только рекомендованную блокировку файлов, хотя некоторые файловые системы Linux имеют дополнительные функции. См., Например, Как мне сделать Windows блокировку файла более похожей на UNIX блокировку файла?
Как сказал Мэтт в комментарии это означает, что вы Git удалили индексную копию этих файлов. Поэтому, сравнивая коммит HEAD
с предлагаемым следующим коммитом, будет разница - если вы на самом деле делаете коммит прямо сейчас - что эти файлы не будут в следующем коммите, т.е. между этими двумя коммитами вы удалили файлы.
Чтобы положить один файл обратно, следуйте инструкциям, которые напечатаны git status
:
(use "git restore --staged <file>..." to unstage)
т.е. выполните:
git restore --staged nta/executor/.gitignore
скопировать HEAD
копию nta/executor/.gitignore
обратно в индекс Git. Теперь копия HEAD
и предложенная индексом копия соответствуют следующему коммиту, а git status
больше не будет упоминать файл. При необходимости повторите для каждого файла.
При желании вы можете массово перезаписать весь индекс (весь предложенный следующий коммит) из текущего коммита с помощью:
git reset
(или git reset --mixed
, но по умолчанию --mixed
).
Если вы тщательно скопировали какой-то конкретный файл в индекс, это перезапишет это осторожно. скопируйте файл в указатель, и вам, возможно, придется заново скопировать его, чтобы получить эффект, который вы так тщательно настроили. Но обычно мы склонны копировать все, что у нас есть в наших рабочих деревьях, в индекс, поэтому уничтожение индексной копии таким образом не имеет большого значения.
Я пытался использовать предложенный метод для отменить эти изменения ... Это сработало для некоторых файлов, но многие другие остаются в списке как удаленные.
Мы могли бы использовать более подробную информацию по этому вопросу, такую как фактическое вырезание и вставка до и после git status
(или его части) и выбранная команда git restore
. Он определенно должен go вернуться в состояние, которое было в коммите HEAD
, после чего git status
должен молчать об этом.