Undo git reset --hard с незафиксированными файлами - PullRequest
2 голосов
/ 21 января 2020

У меня есть существующий java проект, и я сделал следующее

cd existing_folder
git init
git remote add origin URL
git add .
git reset --hard

Я сделал случайно, сделал git сброс --hard есть ли способ восстановить мои данные назад

на этом все мои каталоги и файлы моего проекта удалены

Ответы [ 4 ]

1 голос
/ 21 января 2020

Вы можете попытаться восстановить объекты индекса. Я думаю, что вы ищете это.

Ранее подготовленные изменения (git add) должны быть восстановлены из объектов индекса

git reset HEAD@{0}

. Вы можете использовать git reflog show для отображения индекса

git reflog show

Вывод будет выглядеть как

93567ad HEAD@{0}: reset: moving to HEAD@{6}    
203e84e HEAD@{1}: reset: moving to HEAD@{1}    
9937a76 HEAD@{2}: reset: moving to HEAD@{2}
203e84e HEAD@{3}: checkout: moving from master to master
203e84e HEAD@{4}: reset: moving to HEAD~1
9937a76 HEAD@{5}: reset: moving to HEAD~1
d5bb59f HEAD@{6}: reset: moving to HEAD~1
9300f9d HEAD@{7}: commit: fix-bug

Более подробная информация Восстановление из git сброс --hard?

Также вы можете записать объект в .git/lost-found/ с помощью git fsck --lost-found. Здесь вы можете использовать git show <filename> для просмотра содержимого каждого файла.

0 голосов
/ 21 января 2020

См. Восстановление файлов в git после сброса --hard для добавленных файлов (не зафиксировано!) . Вы можете использовать несколько ярлыков: вместо просто:

git fsck

, который печатает набор dangling blob сообщений, которые необходимо сохранить и проверить, как показано в принятом ответе , используйте:

git fsck --lost-found

На этот раз вместо высказывания dangling blob *hash, Git извлечет содержимое этого "висящего шарика" файл в .git/lost-found/other. Имя извлеченного файла будет blob ha sh ID. Содержимое будет либо одним из файлов, * * * с добавленным git add ., либо другим содержимым, оставшимся от какой-либо другой более ранней операции, которая добавила содержимое, но в итоге не использовала его. (В этом случае, поскольку сам репозиторий Git является новым, таких файлов не должно быть.)

К сожалению, имена файлов все потеряны: они были в индекс, но индекс теперь был переустановлен через git reset и больше не имеет правильных имен файлов. Если вы можете отобразить содержимое обратно на имя файла вручную, вы можете переместить или скопировать файлы из каталога .git/lost-found/other, чтобы они существовали с теми именами, которые у вас были изначально.

(Когда вы все закончите, вы можете удалить содержимое, если оно есть, .git/lost-found/commits и все, что осталось в .git/lost-found/other. В вашем случае ничего не должно быть в .git/lost-found/commits.)

0 голосов
/ 21 января 2020

Есть только способ найти содержимое файлов, которые были добавлены в индекс:

find .git/objects -type f | sed 's/.git\/objects\///g' | sed 's/\///g' | xargs -n 1 git cat-file -p

Надеюсь, это поможет! Дополнительную документацию по git объекту можно найти в официальных документах

0 голосов
/ 21 января 2020

git reset --hard сбрасывает работу до последнего коммита. К сожалению, в Git нет способа отменить эту операцию, поэтому, если у вас нет другой формы резервного копирования, вам не повезло.

...