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

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

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

но это работает только на файлах.

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

6 ответов


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

также Примечание!--11 - >найти и восстановить удаленный файл в репозиторий Git

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

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

git checkout -- path/to/folder

если удаление уже проиндексировано, вы должны сначала сбросить это:

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>

восстановление полного рабочего дерева с удаленного commit

git reset --hard <revision> 

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

git checkout -- removed_directory

Если вы хотите отменить все изменения:

git reset --hard HEAD

единственное, что сработало для меня, это проверить РЕПО в другой папке. Предположим текущего РЕПО в /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

и удалите папку temp

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


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

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

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


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

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


Rt щелкните проект --> Команда --> сброс

в поле тип сброса выберите жесткий сброс. Это приведет к репликации удаленного репозитория в рабочую область.