我将尝试使用
如果我执行
运行
是否有一种方法可以检出以前版本的目录,使其完全匹配,而无需检出整个工作树?
更新:看起来这样可以解决问题:
这会使我的工作树和索引处于奇怪的状态,但达到了预期效果。
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/
这会使我的工作树和索引处于奇怪的状态,但达到了预期效果。
thing/dir2
再次出现了。 - blorbx