Я только что удалил одну неделю работы! Как отменить git rm -r -cached?
Я совершил неправильный файл, поэтому мне захотелось его очистить, но случайно я перезаписал все свои файлы в каталоге с последними файлами, привязанными к git.
Помогите пожалуйста!
Что я сделал:
git add fileIdidnotwanttoadd
git rm -r --cached .
git reset --hard HEAD
Результат: все мои исправления исчезли! Я исправил 3 очень трудные ошибки, и все прошло!
Edit:
Спасибо всем. Я использовал большинство ваших предложений, но мне пришлось переделать несколько вещей, но теперь все восстановлено. Не более перфекционизм, я выучил свой урок!
Ответы
Ответ 1
(from: Восстановить из git reset --hard?)
Вы не можете вернуть незафиксированные изменения в целом, поэтому реальный ответ здесь будет: посмотрите на свою резервную копию. Возможно, ваш редактор /IDE хранит временные копии в /tmp или C:\TEMP и тому подобное. [1]
git reset [email protected]{1}
Это приведет к восстановлению предыдущей главы - в случае, если вы что-то совершили раньше
[1]
- vim, например. необязательно сохраняет постоянную отмену,
- eclipse IDE хранит локальную историю;
такие функции могут сохранить ваш **
Ответ 2
- Если вы скорректировали локально эти исправления, вы можете восстановить их с помощью
git reflog
.
(для одного файла вы также можете попробовать git rev-list
)
- Если вы их не совершали (т.е. они были только в рабочем дереве, а не в репо), они исчезли с вашего локального рабочего дерева.
- Если вы добавили их в индекс (но не зафиксировали их), см. Mark answer.
Ответ 3
Существуют различные ситуации, в которых вы можете восстановить свои файлы:
- Если вы выполнили свои изменения перед выполнением вышеуказанных команд (т.е. запустили
git add <file>
, когда <file>
содержало содержимое, которое вы хотите вернуть), тогда должно быть возможно (несколько с трудом) вернуть этот файл, следуя этот метод.
- Если вы когда-либо создавали коммит, содержащий эти файлы, то вы можете вернуться к этой фиксации, найдя имя объекта commit в рефлоге и затем создав на нем новую ветку. Тем не менее, это звучит из вышесказанного, как будто вы никогда не совершали эти файлы.
- Предположим, что вы когда-либо выполняли
git stash
во время работы над этими файлами, они могут быть восстановлены либо через git stash list
, либо методы 1. или 2. выше.
В противном случае, боюсь, вам может быть не повезло.: (
Ответ 4
Я не нашел ни одного из вышеупомянутых решений успешным. Запуск
git status
в корне вы увидите все незафиксированные изменения. Чтобы отменить изменения, вызванные
git -rm --cached <files>
вы хотели бы использовать
git checkout -- *
Я надеюсь, что это поможет снять стресс.