неустановленные файлы исчезли после git reset --hard
Я пробовал git reset --hard HEAD@{n}
с git reflog
и я потерял все с моими текущими неустановленными файлами :' (
неустановленные файлы являются последними git add
Я сделал, до этого я пытался git reset
до последнего git commit
.
и все мои файлы исчезли, я не могу вернуться в git add
до последнего коммита :'(
5 ответов
неясно, потеряли ли вы файлы в своем рабочем каталоге или файлы в индекс. Вы говорите, что потеряли свои "неустановленные файлы", но затем упоминаете возможно, вы запустили "git add". "unstaged файлы" теряются навсегда.
Staged файлы могут быть восстановлены с помощью
git fsck --full --unreachable --no-reflog
для каждого добавленного файла будет потерян объект blob, и для каждого запись каталога там будет объект дерева. Вы бы восстановили свои файл изменяется, делая
git cat-file -p SHA
для каждого файл, который вы изменили
(master)$ vi bar
(master)$ vi baz
(master)$ vi foo
(master)$ git add foo bar baz
(master)$ git reset --hard HEAD
HEAD is now at ead8fa2 initial
(master)$ git fsck --full --unreachable --no-reflog
Checking object directories: 100% (256/256), done.
unreachable blob 0c29287001b29159f11c4e8a320bce7e9789c00b
unreachable blob 1524d3478e3d0b92866a53239b10bcd4b3838c4d
unreachable blob 97b724e770249816c61d8a526415986208ed7e15
// take a look at one of the objects
(master)git cat-file -p 0c29287001b29159f11c4e8a320bce7e9789c00b
changes for bar
//Here, based on inspecting the output, I can determine that 0c29287 was the file "bar"
(master) git cat-file -p 0c29287 > bar
(обратите внимание, что я не получил никаких потерянных деревьев, когда я тестировал, поэтому эта часть может не работать)
если вы изменили целую кучу файлов, вероятно, легче восстановить через объект tree вместо отдельных файлов
git read-tree SHA
где SHA-потерянный объект дерева для корневого дерева.
все неустановленные / незафиксированные файлы будут удалены с помощью git reset --hard
использование --hard не рекомендуется, так как этот параметр выводит все unstaged / uncommited файлы, вместо этого вы должны притон сначала, а затем используйте обычный сброс
вместо
git reset --hard HEAD@{n}
вы должны сделать
git stash
git reset HEAD@{n}
ваш код затем сохраняется в стеке тайника, вы можете получить его снова, выполнив
git stash pop
хотя эта команда объединяет" спрятанные " изменения с их текущим заголовком (Сташ реализован как ветвь), рекомендуется делать извлечения Сташа на тех же коммитах, где эти сташи были сгенерированы
если вы поставили файлы с git add
, его все еще можно найти назад. Но если файлы не инсценированы, я должен сказать, что это невозможно. :(
просто помните, что git reset
действительно небезопасно, особенно для неустановленных файлов.
но если файлы действительно очень важны, то я могу думать о том, что вы можете прекратить изменять любые данные на своем диске и попытаться восстановить диск с помощью таких инструментов, как finaldata
. Он может найти что-то если повезет, потому что у вас есть уже перезаписаны некоторые файлы после git reset
.
в любом случае,Git
действительно мощный и классный инструмент, если вы знакомы с ним.
Low tech tip, который может быть полезен для некоторых. Если неустановленные / незафиксированные файлы, которые вы потеряли, где открыть в Редакторе. Попробуйте сделать отмену в этом файле, и вы должны получить "предыдущие версии" файла из стека истории редакторов.
Если кто-то сделал такую же ошибку, как я git reset --hard
перед добавлением неустановленных файлов все еще есть шансы вернуть эти изменения. Хотя эти файлы больше не доступны в РЕПО, но некоторые из новых IDE поддерживают свою собственную историю. Как и в моем случае, я смог получить свои неустановленные изменения из Android Studio функция локальной истории, которая находится под VCS.
направления to Отмена Изменений