Restore a deleted folder in a Git repo

GitGit Checkout

Git Problem Overview


I have deleted all the contents inside a folder and the folder is empty. I still had a copy in my remote repo. But when I did a git pull it didn't put back the deleted files isn't is supposed to do that?

So I did some research and saw that you can revert a file by doing git checkout <revision> -- <name of file>

But that only works on files.

How can I retrieve all the files inside the directory?

Git Solutions


Solution 1 - Git

Everything you can do with a file, you can do with a folder too.

Also note https://stackoverflow.com/questions/953481/find-and-restore-a-deleted-file-in-a-git-repo


Files are deleted from working tree but not committed yet:

If you have not yet indexed (git add) your changes you can revert content of a directory:

git checkout -- path/to/folder

If the deletion is already indexed, you should reset that first:

git reset -- path/to/folder
git checkout -- path/to/folder


Restore the full working tree (not a single folder), but lose all uncommitted changes
git reset --hard HEAD


When files are deleted in some commit in the past:

Find the last commit that affected the given path. As the file isn't in the HEAD commit, this commit must have deleted it.

git rev-list -n 1 HEAD -- <file_path>

Then checkout the version at the commit before, using the caret (^) symbol:

git checkout <deleting_commit>^ -- <file_path>


Restore the full working tree from a distant commit
git reset --hard <revision> 

Solution 2 - Git

You can restore files or folder with git restore.

git restore --source master~1 "PATH_IN_YOUR_REPO"

Here, master~1 reverts your folder to "1" revision back from your master branch.

Source: https://git-scm.com/docs/git-restore

Solution 3 - Git

If you have not yet commited your changes you can revert content or a directory:

git checkout -- removed_directory

If you want to revert all changes do:

git reset --hard HEAD

Solution 4 - Git

The only thing that worked for me was to checkout the repo in another folder. Assume the current repo is in /home/me/current.

I then did

git clone /home/me/current /home/me/temp

This make a separate clone of the repo in /home/me/temp

I can now go to /home/me/temp and do whatever I want. For example

git reset --hard commit-hash-before-delete

Now I can copy the deleted file folder back

cp -r /home/me/temp/some/deleted/folder /home/me/current/some/deleted/folder

And delete the temp folder

rm -rf /home/me/temp

The examples of

git checkout -- some/deleted/folder
git checkout -- some/deleted/folder/*

DO NOT WORK

$ 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.

Other examples like

git reset --hard HEAD

are destructive beyond just the deleted files. Any other changes will also be lost.

Similarly

git reset --hard some-commit

will lose any commits after some-commit

Solution 5 - Git

As of git 2.24.0, there's an experimental new git command: git restore

git restore --staged some/deleted/folder

Solution 6 - Git

If you don't specify a specific file you should be able to pull the full contents of a specific commit. Like: git checkout 264794319e9695ba843cd6 (assuming that hash has all your files at the right state).

The reason pull isn't restoring files is that git sees your deletions as the more recent change, applying that on top of whatever you're pulling.

(I'd recommend experimenting in a new branch.)

Solution 7 - Git

If you are just looking to recover a deleted folder and you have other commits after the deletion, then you can also just goto your project on github.com.

From github.com, go you to your last commit that has your folder. You should see the commit message and to the right there's a button labeled "Browse Files". Clicking this will take you to all the files from that stage of the commit.

From there you can clone the code or just download the code as a zip.

Solution 8 - Git

For me I temporarily deleted a folder due to an unrelated issue. Instead of trying to restore it from a backup, I just ran git restore folder/ and it restored it to what the branch had originally.

Solution 9 - Git

If you have to Recover Without Git Command Then Follow This

If You have Github Desktop It will make things easy

If not then install and sign in

  1. Go to File

  2. Clone repository

  3. Select Repository your Repo

  4. Click on History

enter image description here

  1. Right Click on Commit that used to delete Folder/File

enter image description here

  1. Select Revert changes in commit option

  2. Now Just Click on Push Origin

enter image description here

  1. All set! You Have recovered the deleted File/Folder you can check it in your Repository

Solution 10 - Git

for uncommited deletions, Its as simple as this :

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionjson2021View Question on Stackoverflow
Solution 1 - GitNick VolynkinView Answer on Stackoverflow
Solution 2 - GitjBelangerView Answer on Stackoverflow
Solution 3 - GitIvan MushketykView Answer on Stackoverflow
Solution 4 - GitgmanView Answer on Stackoverflow
Solution 5 - GitiethreeView Answer on Stackoverflow
Solution 6 - GitlostphilosopherView Answer on Stackoverflow
Solution 7 - GitstldougView Answer on Stackoverflow
Solution 8 - GitShygarView Answer on Stackoverflow
Solution 9 - GitTejas VeerView Answer on Stackoverflow
Solution 10 - GitjustadevView Answer on Stackoverflow