Подтвердить что ты не робот

Восстановление удаленной папки в репозитории Git

Я удалил все содержимое внутри папки, и папка пуста. У меня все еще была копия в моем удаленном репо. Но когда я сделал git pull, он не вернул удаленные файлы, он не должен это делать?

Итак, я сделал некоторые исследования и увидел, что вы можете вернуть файл, выполнив git checkout <revision> -- <name of file>

Но это работает только с файлами.

Как получить все файлы внутри каталога?

4b9b3361

Ответ 1

Все, что вы можете сделать с файлом, вы также можете сделать с папкой.

Также обратите внимание на Найти и восстановить удаленный файл в репозитории Git

Файлы удаляются из рабочего дерева, но еще не зафиксированы:

Если вы еще не проиндексировали (git add) свои изменения, вы можете вернуть содержимое каталога:

git checkout -- path/to/folder

Если удаление уже проиндексировано, сначала нужно reset:

git reset -- path/to/folder
git checkout -- path/to/folder

Восстановить полное рабочее дерево (не одну папку), но потерять все незафиксированные изменения

git reset --hard HEAD

Когда файлы удаляются в некотором фиксации в прошлом:

Найдите последнюю фиксацию, которая повлияла на данный путь. Поскольку файл не находится в фиксации HEAD, эта фиксация должна удалить его.

git rev-list -n 1 HEAD -- <file_path>

Затем проверьте версию в фиксации раньше, используя символ каретки (^):

git checkout <deleting_commit>^ -- <file_path>

Восстановить полное рабочее дерево из удаленного фиксации

git reset --hard <revision> 

Ответ 2

Если вы еще не выполнили свои изменения, вы можете вернуть содержимое или каталог:

git checkout -- removed_directory

Если вы хотите вернуть все изменения, выполните следующие действия:

git reset --hard HEAD

Ответ 3

Единственное, что сработало для меня, это проверить репо в другой папке. Предположим, что текущее репо находится в /home/me/current.

Затем я сделал

git clone /home/me/current /home/me/temp

Это делает отдельный клон репо в /home/me/temp

Теперь я могу перейти к /home/me/temp и делать все, что захочу. Например

git reset --hard commit-hash-before-delete

Теперь я могу скопировать папку удаленных файлов назад

cp -r /home/me/temp/some/deleted/folder /home/me/current/some/deleted/folder

И удалите временную папку

rm -rf /home/me/temp

Примеры

git checkout -- some/deleted/folder
git checkout -- some/deleted/folder/*

НЕ РАБОТАЙ

$ git checkout -- some/deleted/folder/*
zsh: no matches found: some/deleted/folder/*
$ git checkout -- some/deleted/folder
error: pathspec 'some/deleted/folder' did not match any file(s) known to git.

Другие примеры, например

git reset --hard HEAD

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

Аналогично

git reset --hard some-commit

потеряет любые фиксации после some-commit

Ответ 4

Если вы не укажете конкретный файл, вы сможете получить полное содержимое определенного коммита. Например: git checkout 264794319e9695ba843cd6 (предполагается, что хэш имеет все ваши файлы в правильном состоянии).

Причина pull не в восстановлении файлов, так это то, что git видит ваши удаления как более недавние изменения, применяя это к тому, что вы тянете.

(Я бы рекомендовал экспериментировать в новой ветке.)

Ответ 5

Rt Нажмите проект → Команда → Reset

В reset введите Hard reset. Это позволит реплицировать удаленный репозиторий в рабочее пространство.

Ответ 6

для неустановленных делеций, это так просто:

git reset HEAD rel/path/to/deleted/directory/*