2016-12-15 2 views
0

Я работал над новым проектом. Я добавил все файлы в мой местный git-репозиторийВосстановить файлы из git

git add . 

но я не совершал его. Затем я случайно сброшу git

git reset --hard 

Как можно восстановить файлы? Я надеялся, что атом сохранил файлы, но и там, файлы, которые больше не открываются. Nevermind, этот атом закроет все мои файлы.

+1

«Тогда я случайно сброшу git' ... ввод« git reset --hard »случайно кажется немного маловероятным. В любом случае ваши изменения исчезли из рабочего каталога и индекса, поэтому, если в вашей среде нет резервной копии, вам может быть не повезло. –

ответ

2

Когда вы git add файл, git хранит его как объект в вашем репозитории (в каталоге .git). Ваши файлы, вероятно, все еще висят вокруг. С другой стороны, запустив команду git reset --hard, вы потеряли какую-либо информацию о файле имен.

Вы можете увидеть сами объекты, выполнив:

find .git/objects -type f 

Который будет производить что-то вроде:

.git/objects/67/6e8ff99e42b61f96bb0107fa1dff59594eba07 
.git/objects/7c/45d8f7d987c584a8d61a8d75431ddd4f1ba52f 

Вы можете увидеть содержимое этих объектов с помощью команды git cat-file, как:

git cat-file -p 7c45d8f7d987c584a8d61a8d75431ddd4f1ba52f 

Обратите внимание, что идентификатор объекта представляет собой конкатенацию двух символов s в каталоге первого уровня, за которым следуют все символы имени файла.

Таким образом, было бы довольно тривиально написать сценарий, который восстановит содержимое всех ваших файлов, но вам придется вручную переименовать их после факта.

+0

Вот короткая демонстрация: https://asciinema.org/a/2jj40llsgjjrkvp8nfxqqt5s1 – larsks

Смежные вопросы