如何从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是这样的:
-
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 …"
如果你只是简单地执行git checkout <SHA-ID>
那么它会临时将你移动到sha-commit。
每个提交对象都保存着当时磁盘的整个结构,所以如果你有文件需要拷贝出来,你可以这样做。 但是,警告你不会在任何一个分支,所以你必须在把文件复制到你的工作树上并提交之前把它移回到master。