Восстановление удаленной папки в репозитории Git
Я удалил все содержимое внутри папки, и папка пуста. У меня все еще была копия в моем удаленном репо. Но когда я сделал git pull
, он не вернул удаленные файлы, он не должен это делать?
Итак, я сделал некоторые исследования и увидел, что вы можете вернуть файл, выполнив
git checkout <revision> -- <name of file>
Но это работает только с файлами.
Как получить все файлы внутри каталога?
Ответы
Ответ 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/*