How to find and restore a deleted file in a Git repository
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>
Or in one command, if $file
is the file in question.
git checkout $(git rev-list -n 1 HEAD -- "$file")^ -- "$file"
If you are using zsh and have the EXTENDED_GLOB option enabled, the caret symbol won't work. You can use ~1
instead.
git checkout $(git rev-list -n 1 HEAD -- "$file")~1 -- "$file"
- Use
git log --diff-filter=D --summary
to get all the commits which have deleted files and the files deleted; - Use
git checkout $commit~1 path/to/file.ext
to restore the deleted file.
Where $commit
is the value of the commit you've found at step 1, e.g. e4cf499627
To restore all those deleted files in a folder, enter the following command.
git ls-files -d | xargs git checkout --