正确恢复 Git 中已删除的文件夹,以便文件最终位于当前分支中?

Restore deleted folder in Git correctly so files end up in current branch?

我需要恢复我在 Git 中删除的文件夹,但我在执行此操作时遇到了问题,所以我最终在正确的分支中找到了该文件夹。

我完成了:

git checkout commit_id -- /path/to/folder

这只是将 repo 置于 detached HEAD 状态,我不确定如何将文件返回到 master 分支?

我也试过:

git checkout -b restore commit_id -- /path/to/folder

这创建了一个新分支,但是当我试图将该分支合并到 master 时,它说它是 "Already up to date"。

运行 根据明显的重复问题,以下内容也不起作用,这只是让我再次切换到另一个分支:

git checkout myBranch -- /path/to/folder

为什么做起来这么难?正确的做法是什么?

您的第一次尝试应该可以。一个工作示例:

▸ git init
Initialized empty Git repository in /Users/***/Desktop/repo/.git/

▸ mkdir foo
▸ echo "foo" > foo/1
▸ git add foo
▸ git commit -m "file in foo"

▸ echo "bar" > 1
▸ git add .
▸ git commit -m "file"

▸ rm -rd foo
▸ git add foo
▸ git commit -m "removed foo"

▸ echo "foobar" >> 1
▸ git add .
▸ git commit -m "change"

树现在看起来像这样:

* 95e470d (HEAD -> master) change
* e644860 removed foo
* 35e2e02 file
* 16fd6f0 file in foo

▸ git checkout HEAD~2 -- ./foo/

结果:

▸ git status

    new file:   foo/1

我想可能是输入的路径不对。当我执行 git checkout HEAD~2 -- foo 时,什么也没有发生。尝试使用以 ./ 开头的相对路径。