我已删除文件夹内的所有内容,该文件夹为空。我的远程仓库中仍然有一份副本。但是当我做了一个 git pull
它没有放回已删除的文件时不应该这样做吗?
所以我做了一些研究,发现您可以通过执行 git checkout <revision> -- <name of file>
来还原文件
但这仅适用于文件。
如何检索目录中的所有文件?
git status
将提示您运行什么命令
您可以对文件执行的所有操作,也可以对文件夹执行。
另请注意Find and restore a deleted file in a Git repository
文件已从工作树中删除但尚未提交:
如果您还没有为您的更改编制索引 (git add
),您可以恢复目录的内容:
git checkout -- path/to/folder
如果删除已编入索引,则应首先重置:
git reset -- path/to/folder
git checkout -- path/to/folder
恢复完整的工作树(不是单个文件夹),但会丢失所有未提交的更改
git reset --hard HEAD
在过去的某个提交中删除文件时:
查找影响给定路径的最后一个提交。由于该文件不在 HEAD 提交中,因此该提交必须已将其删除。
git rev-list -n 1 HEAD -- <file_path>
然后使用插入符号 (^
) 签出之前提交时的版本:
git checkout <deleting_commit>^ -- <file_path>
从远程提交中恢复完整的工作树
git reset --hard <revision>
您可以使用 git restore 恢复文件或文件夹。
git restore --source master~1 "PATH_IN_YOUR_REPO"
在这里,master~1 将您的文件夹从您的 master 分支恢复为“1”版本。
来源:https://git-scm.com/docs/git-restore
git restore --source=HEAD~2 "Path_To_Restore"
。顺便说一句,它可以是相对路径。
如果您尚未提交更改,您可以恢复内容或目录:
git checkout -- removed_directory
如果要还原所有更改,请执行以下操作:
git reset --hard HEAD
git checkout -- removed_directory
does not work
git checkout -- removed_directory
为我工作,但我之前已经创建了这个目录(通过该目录中的 checkout
一个文件)。创建后,所有文件都通过此命令恢复到文件夹中。
唯一对我有用的是在另一个文件夹中签出 repo。假设当前 repo 位于 /home/me/current
。
然后我做了
git clone /home/me/current /home/me/temp
这会单独克隆 /home/me/temp
中的存储库
我现在可以去 /home/me/temp
做任何我想做的事。例如
git reset --hard commit-hash-before-delete
现在我可以将删除的文件夹复制回来
cp -r /home/me/temp/some/deleted/folder /home/me/current/some/deleted/folder
并删除临时文件夹
rm -rf /home/me/temp
的例子
git checkout -- some/deleted/folder
git checkout -- some/deleted/folder/*
不工作
$ git checkout -- some/deleted/folder/*
zsh: no matches found: some/deleted/folder/*
$ git checkout -- some/deleted/folder
error: pathspec 'some/deleted/folder' did not match any file(s) known to git.
其他例子如
git reset --hard HEAD
除了已删除的文件之外,它们还具有破坏性。任何其他更改也将丢失。
相似地
git reset --hard some-commit
在 some-commit
之后将丢失所有提交
如果您不指定特定文件,您应该能够提取特定提交的全部内容。喜欢:git checkout 264794319e9695ba843cd6
(假设哈希的所有文件都处于正确的状态)。
pull
不恢复文件的原因是 git 将您的删除视为最近的更改,并将其应用到您要提取的任何内容之上。
(我建议在新分支中进行试验。)
如果您只是想恢复已删除的文件夹,并且在删除后还有其他提交,那么您也可以直接转到 github.com 上的项目。
从 github.com,转到包含您的文件夹的最后一次提交。您应该会看到提交消息,并且在右侧有一个标有“浏览文件”的按钮。单击此按钮将带您进入该提交阶段的所有文件。
从那里您可以克隆代码或将代码下载为 zip。
对我来说,由于不相关的问题,我暂时删除了一个文件夹。我没有尝试从备份中恢复它,而是运行 git restore folder/
并将其恢复到分支最初的状态。
如果您必须在没有 Git 命令的情况下进行恢复,请按照此操作
如果你有 Github 桌面它会让事情变得简单
如果没有,则安装并登录
转到文件克隆存储库选择存储库您的存储库单击历史记录
https://i.stack.imgur.com/Mqu9M.png
右键单击用于删除文件夹/文件的提交
https://i.stack.imgur.com/30kdw.png
选择 Revert changes in commit 选项现在只需单击 Push Origin
https://i.stack.imgur.com/rUlEP.png
可以了,好了!您已恢复已删除的文件/文件夹,您可以在您的存储库中检查它
对于未提交的删除,它就像这样简单:
git reset HEAD rel/path/to/deleted/directory/*
不定期副业成功案例分享
git checkout -- path/to/folder/*
does not work 注意:问题是如何恢复文件夹而不是文件How can I retrieve all the files inside the directory
表示目录及其文件。但令人惊讶的是,该命令对我也不起作用。我记得一年前是这样的。git checkout -- path
或git checkout -- 'path/*'
。在您的示例中,您使用 OP 似乎没有执行的git rm
删除。我已经为这种情况添加了说明。谢谢!git checkout "<deleting_commit>^" -- <file_path>