Я случайно сказал git rm -r .
. Как мне восстановиться после этого?
Я не совершал.
Я думаю, что все файлы были помечены для удаления, а также были физически удалены из моей локальной проверки.
РЕДАКТИРОВАТЬ: Я мог (если бы я знал команду) вернуться к последнему коммиту. Но было бы намного лучше, если бы я мог просто отменить git rm -r .
. Потому что я не совсем уверен, что я сделал после последнего коммита и до git rm -r .
.
-f
чтобыgit rm
мерзавец не будут удалены все файлы , которые инсценировали или unstaged правки поэтомуgit reset; git checkout .
должны восстановить все.git restore
:git restore -s@ -SW -- .
. Смотрите мой ответ ниже .Ответы:
Должен сделать это. Если у вас нет незафиксированных изменений, которые вас волнуют, то
должен принудительно сбросить все до вашего последнего коммита. Если у вас есть незафиксированные изменения, но первая команда не работает, сохраните незафиксированные изменения с помощью
git stash
:источник
git reset --hard HEAD
уничтожает любые полезные изменения, которые вы сделали в родительских каталогах текущего рабочего каталога.Я собрал несколько файлов и продолжал вносить изменения до следующего коммита, когда понял, что мне нужно вернуть некоторые из этих файлов. Вместо того, чтобы хранить и сбрасывать, вы можете просто извлекать отдельные файлы, которые вы пропустили / удалили, если хотите:
Это оставляет ваши другие незафиксированные изменения без изменений.
источник
git rm
рекурсивную единицу, а не целуюgit rm -r
. Для полного рекурсивного удаления другие решения могут быть лучше, в зависимости от количества удаленных файлов.Чтобы восстановить отдельные файлы или папки, можно использовать следующие
Сначала будут созданы записи индекса
path/to/file
и файл будет таким же, каким он был при последнем коммите, т.е.HEAD
.Подсказка: можно передать хеш коммита обеим командам, чтобы воссоздать файлы из старого коммита. Смотрите
git reset --help
иgit checkout --help
для деталей.источник
git rm
операции без уничтожения других незафиксированных изменений.Обновить:
Поскольку
git rm .
все файлы в этом и дочерних каталогах удаляются как в рабочей проверке, так и в индексе, необходимо отменить каждое из следующих изменений:Это должно делать то, что вы хотите. Это не влияет на родительские папки вашего извлеченного кода или индекса.
Старый ответ, которого не было:
сделает свое дело, и не будет стереть любые незафиксированные изменения вы внесли в свои файлы.
после этого вам нужно повторить любые
git add
команды, которые вы поставили в очередь.источник
git alias.co="checkout"
так, чтобыgit co
оформить заказ.Если у вас не получится ничего из вышеперечисленного, вы можете получить данные, используя предложенное здесь: http://www.spinics.net/lists/git/msg62499.html
источник
отменить мерзавца
отменить мерзавца
отменить мерзавца rm -rf
Uncommitted changes
включает в себяnot staged changes
,staged changes but not committed
.источник
git rm -rf
, поскольку это может также удалить неотслеживаемые или промежуточные (только) файлы.git rm -rf file
иgit rm -rf dir
не будет удалять неотслеживаемые файлы.Если вы зафиксировали и отправили изменения, вы можете сделать это, чтобы получить файл обратно
источник
Уже есть несколько хороших ответов, но я мог бы предложить малоиспользуемый синтаксис, который не только прекрасно работает, но и очень явно выражает то, что вы хотите (поэтому не страшно и не таинственно)
источник
Получить список коммитов
Например, стабильный коммит имеет хэш:
45ff319c360cd7bd5442c0fbbe14202d20ccdf81
источник
У меня была идентичная ситуация. В моем случае решение было:
источник
В Git 2.23+ (август 2019 г.) правильная команда для восстановления файлов (и индекса) должна использоваться ...
git restore
(нетreset --hard
или запутаннаяgit checkout
команда )Это:
Или его сокращенная форма:
источник
У меня была точно такая же проблема: чистила папки, переставляла и перемещала файлы. Я вошел: Git RM .и нажмите ввод; и затем почувствовал, что мои кишки немного ослабли. К счастью, я не набрал git commit -m "" сразу.
Тем не менее, следующая команда
все восстановил и спас мне жизнь.
источник