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

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

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

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

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

12 ответов

Решение

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

Также обратите внимание, что Найти и восстановить удаленный файл в 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>

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

git reset --hard <revision> 

Вы можете восстановить файлы или папку с помощью git restore.

git restore --source master~1 "PATH_IN_YOUR_REPO"

Здесь master ~1 возвращает вашу папку в ревизию "1" из вашей основной ветки.

Источник: https://git-scm.com/docs/git-restore

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

git checkout -- removed_directory

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

git reset --hard HEAD

Начиная с git 2.24.0, есть экспериментальная новая команда git: git restore

git restore --staged some/deleted/folder

Я временно удалил папку из-за несвязанной проблемы. Вместо того, чтобы пытаться восстановить его из резервной копии, я просто запустил и он восстановил его до исходного состояния.

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

Если вы просто хотите восстановить удаленную папку и у вас есть другие коммиты после удаления, вы также можете просто перейти к своему проекту на github.com.

На github.com перейдите к последней фиксации, в которой есть ваша папка. Вы должны увидеть сообщение о фиксации, а справа есть кнопка с надписью "Обзор файлов". Щелкнув по нему, вы перейдете ко всем файлам с этого этапа фиксации.

Оттуда вы можете клонировать код или просто загрузить его в виде zip-архива.

Если вам нужно восстановить без команды Git, следуйте этому

Если у вас есть рабочий стол Github, это упростит задачу

Если нет, то установите и войдите в систему

  1. Перейти к файлу

  2. Клонировать репозиторий

  3. Выберите репозиторий вашего репо

  4. Нажмите на историю

  1. Щелкните правой кнопкой мыши на фиксации, которая использовалась для удаления папки/файла.

  1. Выберите «Отменить изменения в опции фиксации».

  2. Теперь просто нажмите на Push Origin

  1. Все готово! Вы восстановили удаленный файл/папку, вы можете проверить его в своем репозитории.

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

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

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

Вы можете восстановить папку с помощью gitbash:

Сначала запустите команду: git status Это позволит вам увидеть корневую папку и все файлы.

Например, допустим, вы удалили корневую папку с именем lib

Файлы:lib/commands/123 lib/commands/123/456 lib/commands/123/456/789/etc

Восстановите его с помощью команды git: git restore *lib

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

git reset HEAD rel / path / to / удалено / каталог /*

Rt Нажмите на проект -> Команда -> Сброс

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

Другие вопросы по тегам