Восстановление удаленной папки в репозитории 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 щелкните проект --> Команда --> сброс
в поле тип сброса выберите жесткий сброс. Это приведет к репликации удаленного репозитория в рабочую область.