我正在尝试git checkout <hash> <directory>
在我的存储库中签出目录的先前版本。这可以将目录中的文件恢复到以前的状态,唯一的问题是自检出修订后添加的子目录不会消失。
例如,如果我的目录结构如下:
HEAD:
thing/dir1/
thing/dir2/
HEAD^:
thing/dir1/
如果我这样做git checkout <hash>
了,那么我会进入分离的 HEAD 模式,一切都匹配得很好。相反,如果我这样做git checkout <hash> thing/
,内容thing/dir1/
将恢复,但thing/dir2/
会保持不变。
运行git status
显示来自 的文件修改thing/dir1/
,但未提及thing/dir2/
. 这很奇怪,因为在 HEAD^ 的上下文中,thing/dir2/
不应该存在,因此应该消失。 git clean
没有帮助,因为它甚至没有显示为未跟踪。
有没有办法签出完美匹配的目录的先前版本,而无需签出整个工作树?
更新:
看起来这会起作用:
git reset <hash> thing/
git checkout <hash> thing/
git clean -fd thing/
这使我的工作树和索引处于奇怪的状态,但具有预期的效果。