恢复在本地分支中删除的文件夹

Restore a folder that's deleted in the local branch

我正在尝试恢复我在本地分支中删除的文件夹,但我无法执行此操作。我从 main 创建了一个新分支并删除了其中一个文件夹,同时我在该分支上工作并稍后进行了 10 次提交。

现在,我想在工作目录中包含已删除的文件夹以及 git 索引。

我试过了-

git checkout HEAD~10 -- ./gt/foo/

指的是 但我不断得到 -

error: pathspec './gt/foo/' did not match any file(s) known to git

我也试过了-

git restore -s main -SW -- gt/foo

从主工作分支中提取文件夹,但出现相同的错误。

如何恢复此文件夹?

首先,使用git log 获取修改文件夹的所有提交的列表。最近的一个将是它被删除的那个。这是一个示例 repo,我在其中创建然后删除了一个名为 hello/world:

的文件夹
$ git log -p -- hello/world

然后,我们可以使用 ~1:

在删除之前提交
git restore --source=27f1f1adf~1 -- hello/world

这会将文件夹恢复到当前目录而不暂存它,但您可以使用 git 添加暂存它:

确保 git 日志显示已删除文件夹的名称。如果 git log 没有找到它,你在错误的目录中搜索(你在项目的根目录下吗?你的路径正确吗?)

一旦您确认名称和路径正确无误,您实际上可以在 bash 或 zsh 中组合这两个步骤(替换为您的文件夹名称):

git restore --source="$(git log --pretty=format:"%H" -n 1 -- hello/world)"~1 -- hello/world

这将找到修改文件夹的最后一次提交(又名,它被删除的那个),然后它将恢复删除的文件夹: