如何从git仓库的历史logging恢复整个目录?

我想从我的git仓库的历史logging中(recursion地)恢复整个目录。

只有1个分支(主)。

我知道提交错误的地方。

我可以使用父提交的sha1散列恢复目录的状态,因为它是在包含错误之前?

我想过这样的事情:

git checkout 348ce0aa02d3738e55ac9085080028b548e3d8d3 path/to/the/folder/ 

但它没有工作。

尝试在修订和path之间添加“ – ”:

 git checkout 348ce0aa02d3738e55ac9085080028b548e3d8d3 -- path/to/the/folder/ 

有两个简单的方法来做到这一点:

如果包含错误的提交包含错误,则使用git revert来反转它的效果。

如果不是,那么简单的path是这样的:

  1. git checkout 348…
  2. cp -a path/to/the/folder ../tmp-restore-folder
  3. git checkout HEAD # or whatever
  4. rm -rf path/to/the/folder
  5. mv ../tmp-restore-folder path/to/the/folder
  6. git add path/to/the/folder
  7. git commit -m "revert …"

如果你只是简单地执行git checkout <SHA-ID>那么它会临时将你移动到sha-commit。

每个提交对象都保存着当时磁盘的整个结构,所以如果你有文件需要拷贝出来,你可以这样做。 但是,警告你不会在任何一个分支,所以你必须在把文件复制到你的工作树上并提交之前把它移回到master。