How to restore a whole directory from history of git repository?
I would like to restore a whole directory (recursively) from the history of my git repository.
There is only 1 branch (master).
I know the commit where errors were included.
Can I use the sha1 hash of the parent commit to restore the state of the directory as it was before the errors were included?
I thought about something like this:
git checkout 348ce0aa02d3738e55ac9085080028b548e3d8d3 path/to/the/folder/
but it did not work.
Solution 1:
try adding '--' between revisions and paths:
git checkout 348ce0aa02d3738e55ac9085080028b548e3d8d3 -- path/to/the/folder/
And if you want to recover a directory from the previous commit, you can replace the commit hash by HEAD~1, for example:
git checkout HEAD~1 -- path/to/the/folder/
Solution 2:
There are two easy ways to do this:
If the commit that included the errors only included the errors, use git revert
to invert the effects of it.
If not, the easy path is this:
git checkout 348…
cp -a path/to/the/folder ../tmp-restore-folder
git checkout HEAD # or whatever
rm -rf path/to/the/folder
mv ../tmp-restore-folder path/to/the/folder
git add path/to/the/folder
git commit -m "revert …"