如何从git存储库的历史记录中恢复整个目录?

时间:2012-03-12 16:17:15

标签: git

我想从我的git存储库的历史记录中恢复整个目录(递归)。

只有一个分支(主)。

我知道包含错误的提交。

我可以使用父提交的sha1哈希来恢复目录的状态,就像它包含错误之前一样吗?

我想到了这样的事情:

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

但它不起作用。

4 个答案:

答案 0 :(得分:136)

尝试在修订版和路径之间添加“ - ”:

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

答案 1 :(得分:2)

有两种简单的方法可以做到这一点:

如果包含错误的提交包含错误,请使用git revert反转其效果。

如果没有,那么简单的道路就是:

  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 …"

答案 2 :(得分:1)

如果您只是执行git checkout <SHA-ID>,那么它会暂时将您转移到该sha-commit。

每个提交对象在那时保存磁盘的整个结构,因此如果您有文件并需要将它们复制出来,则可以这样做。但是请注意,您不会在任何分支中,因此在将文件复制到工作树并提交之前,您必须返回到master。

答案 3 :(得分:0)

git checkout -- path/to/folder/