Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Restore a deleted folder in a Git repo

People also ask

How do I recover a deleted file in git?

Recovering Deleted Files with the Command Line Git provides ways to recover a deleted file at any point in this life cycle of changes. If you have not staged the deletion yet, simply run `git restore <filename>` and the file will be restored from the index.

Is it still possible to restore deleted untracked files in git?

You can't access to previous version of untracked deleted files from git, because, of coruse, they do not exist.


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

Also note Find and restore a deleted file in a Git repository


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> 

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


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

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


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

git restore --staged some/deleted/folder