我想从我的git存储库的历史记录中恢复整个目录(递归)。
只有一个分支(主)。
我知道包含错误的提交。
我可以使用父提交的sha1哈希来恢复目录的状态,就像它包含错误之前一样吗?
我想到了这样的事情:
git checkout 348ce0aa02d3738e55ac9085080028b548e3d8d3 path/to/the/folder/
但它不起作用。
答案 0 :(得分:136)
尝试在修订版和路径之间添加“ - ”:
git checkout 348ce0aa02d3738e55ac9085080028b548e3d8d3 -- path/to/the/folder/
答案 1 :(得分:2)
有两种简单的方法可以做到这一点:
如果包含错误仅的提交包含错误,请使用git revert
反转其效果。
如果没有,那么简单的道路就是:
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 …"
答案 2 :(得分:1)
如果您只是执行git checkout <SHA-ID>
,那么它会暂时将您转移到该sha-commit。
每个提交对象在那时保存磁盘的整个结构,因此如果您有文件并需要将它们复制出来,则可以这样做。但是请注意,您不会在任何分支中,因此在将文件复制到工作树并提交之前,您必须返回到master。
答案 3 :(得分:0)
git checkout -- path/to/folder/