Я только что удалил одну неделю работы!Как отменить git rm -r --cached? - PullRequest
21 голосов
/ 03 октября 2011

Я отправил не тот файл, поэтому хотел его очистить, но случайно переписал все мои файлы в каталоге последними файлами, переданными в git.

Помогите, пожалуйста!

ЧтоЯ сделал:

git add fileIdidnotwanttoadd
git rm -r --cached .
git reset --hard HEAD

результат: все мои исправления исчезли!Я исправил 3 очень серьезных ошибки, и все прошло!


Редактировать:

Спасибо всем.Я использовал большинство ваших предложений, все еще пришлось переделать несколько вещей, но теперь все восстановлено.Нет больше перфекционизма, я усвоил урок!

Ответы [ 4 ]

14 голосов
/ 03 октября 2011

(от: Восстановление из сброса git --hard? )

Вы не можете вернуть незафиксированные изменения в целом, поэтому реальный ответ здесь будет следующим: посмотрите на свою резервную копию. Возможно, ваш редактор / IDE хранит временные копии в / tmp или C: \ TEMP и тому подобное. [1]

git reset HEAD@{1}

Это восстановит предыдущую ГОЛОВУ - если вы что-то совершили ранее

[1]

  • vim например опционально сохраняет постоянную отмену,
  • магазины затмений IDE местная история ;

такие функции могут сохранить ваш **

7 голосов
/ 03 октября 2011

Существуют различные ситуации, в которых вы можете восстановить ваши файлы:

  1. Если вы поставили свои изменения перед выполнением вышеуказанных команд (т. Е. Запустили git add <file>, когда <file> содержал содержимое, которое вы хотите вернуть), то должна быть возможность (несколько кропотливо) вернуть этот файл, выполнив этот метод .
  2. Если вы когда-либо создавали коммит, содержащий эти файлы, вы можете вернуться к этому коммиту, найдя имя объекта коммита в reflog, а затем создав новую ветвь на его основе. Однако из вышесказанного звучит так, как будто вы никогда не фиксировали эти файлы.
  3. Предположим, что вы когда-либо запускали git stash при работе с этими файлами, их можно восстановить либо с помощью git stash list, либо с помощью методов 1 или 2. выше.

В противном случае, боюсь, вам не повезет. (

7 голосов
/ 03 октября 2011
  • Если вы исправили эти исправления локально, вы можете восстановить их с помощью git reflog.
    (для одного файла вы также можете попробовать git rev-list)
  • Если вы их не зафиксировали (т.е. они были только в рабочем дереве, а не в репо), они исчезли из вашего локального рабочего дерева.
  • Если вы добавили их в индекс (но не зафиксировали их), см. Отметка ' ответ .
0 голосов
/ 06 июня 2016

Я не нашел ни одного из указанных выше решений успешным.Запустив

git status

в корне вы увидите все незафиксированные изменения.Чтобы отменить те изменения, вызванные

git -rm --cached <files>

, которые вы хотели бы использовать

git checkout -- *

Я надеюсь, что это поможет снять стресс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...