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 error
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/
If you simply do git checkout <SHA-ID>
then it will temporarily move you to that sha-commit.
Each commit object holds the entire structure of the disk at that time, so if you have files there and need to copy them out, you can do so. Warning though, you will not be in any branch, so you'll have to move back to master before copying the file into your working tree and commit it.
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 …"