Восстановить удаленную папку в репозитории 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, это упростит задачу
Если нет, то установите и войдите в систему
Перейти к файлу
Клонировать репозиторий
Выберите репозиторий вашего репо
Нажмите на историю
- Щелкните правой кнопкой мыши на фиксации, которая использовалась для удаления папки/файла.
Выберите «Отменить изменения в опции фиксации».
Теперь просто нажмите на Push Origin
- Все готово! Вы восстановили удаленный файл/папку, вы можете проверить его в своем репозитории.
Если вы не укажете конкретный файл, вы сможете получить все содержимое определенного коммита. Подобно: 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. Это скопирует ваш удаленный репозиторий в ваше рабочее пространство.