Предупреждение: не используйте следующую команду, если вы не хотите потерять незафиксированную работу!
Использование git resetбыло объяснено, но вы также запросили объяснение переданных команд, так что вот так:
git ls-files -z | xargs -0 rm -f
git diff --name-only --diff-filter=D -z | xargs -0 git rm --cached
Команда git ls-filesвыводит список всех файлов, о которых знает git. Опция -zнакладывает на них определенный формат, ожидаемый формат xargs -0, который затем вызывает rm -fих, что означает удаление их без проверки вашего одобрения.
Другими словами, «перечислите все файлы, которые знает git и удалите вашу локальную копию».
Затем мы git diffпереходим к тому , что показывает изменения между различными версиями элементов, о которых знает git. Это могут быть изменения между разными деревьями, различия между локальными и удаленными копиями и т. Д.
Как здесь используется, он показывает неустановленные изменения; файлы, которые вы изменили, но еще не зафиксировали. Опция --name-onlyозначает, что вам нужны только (полные) имена файлов, и --diff-filter=Dозначает, что вы заинтересованы только в удаленных файлах. (Эй, разве мы не просто удалили кучу вещей?)
Затем они попадают в канал xargs -0, который мы видели ранее, что вызывает git rm --cachedих, то есть они удаляются из кэша, в то время как рабочее дерево должно быть оставлено в покое - за исключением того, что Вы только что удалили все файлы из вашего рабочего дерева. Теперь они также удалены из вашего индекса.
Другими словами, все изменения, поэтапные или неустановленные, пропали, и ваше рабочее дерево пусто. Плачите, проверяйте свои файлы, свежие из источника или удаленного, и переделайте свою работу. Прокляни садиста, который написал эти адские строки; Я понятия не имею, почему кто-то хотел бы сделать это.
TL; DR: вы только что все надули; начать заново и использовать git resetс этого момента.
rm -fне является командой git и не имеет--cachedопции. Ваши локальные файлы были удалены до того, как вы их выполнили,git rmпоэтому я не думаю, что вы можете на законных основаниях обвинятьgit rmчто-либо.