ChatGPT解决这个技术问题 Extra ChatGPT

在 Git 存储库中恢复已删除的文件夹

我已删除文件夹内的所有内容,该文件夹为空。我的远程仓库中仍然有一份副本。但是当我做了一个 git pull 它没有放回已删除的文件时不应该这样做吗?

所以我做了一些研究,发现您可以通过执行 git checkout <revision> -- <name of file> 来还原文件

但这仅适用于文件。

如何检索目录中的所有文件?

git status 将提示您运行什么命令
听起来您的远程仓库中仍然有旧目录(甚至可能在本地仓库中也有)。强烈建议:1)从远程仓库“拉”到 NEW 仓库(不要对本地仓库造成任何损害)。 2) 在您的新本地存储库中尝试“结帐”...甚至“还原”:atlassian.com/git/tutorials/undoing-changes/git-revert。 3)当你确定一切正常时更新远程仓库。
与 git-2.27.x 及更高版本一样,请看 here

N
Nick Volynkin

您可以对文件执行的所有操作,也可以对文件夹执行。

另请注意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 checkout -- path/to/folder/* does not work 注意:问题是如何恢复文件夹而不是文件
@gman How can I retrieve all the files inside the directory 表示目录及其文件。但令人惊讶的是,该命令对我也不起作用。我记得一年前是这样的。
@gman 但它的工作方式类似于 git checkout -- pathgit checkout -- 'path/*'。在您的示例中,您使用 OP 似乎没有执行的 git rm 删除。我已经为这种情况添加了说明。谢谢!
在 Windows 上,您需要像这样添加引号:git checkout "<deleting_commit>^" -- <file_path>
即使我在 reset 命令上指定了一个文件夹,它也取消了整个 repo 中的一堆东西。这有什么意义?当我运行结帐时,它看起来像是恢复了我的文件夹。我不知道 unstage 对我的其余代码做了什么,啊,对等存储库管理器被用于集中式存储库的乐趣,叹息。
j
jBelanger

您可以使用 git restore 恢复文件或文件夹。

git restore --source master~1 "PATH_IN_YOUR_REPO"

在这里,master~1 将您的文件夹从您的 master 分支恢复为“1”版本。

来源:https://git-scm.com/docs/git-restore


你也使用 HEAD。例如:git restore --source=HEAD~2 "Path_To_Restore"。顺便说一句,它可以是相对路径。
I
Ivan Mushketyk

如果您尚未提交更改,您可以恢复内容或目录:

git checkout -- removed_directory

如果要还原所有更改,请执行以下操作:

git reset --hard HEAD

git checkout -- removed_directory does not work
git checkout -- removed_directory 为我工作,但我之前已经创建了这个目录(通过该目录中的 checkout 一个文件)。创建后,所有文件都通过此命令恢复到文件夹中。
g
gman

唯一对我有用的是在另一个文件夹中签出 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 之后将丢失所有提交


i
iethree

从 git 2.24.0 开始,有一个实验性的新 git 命令:git restore

git restore --staged some/deleted/folder

l
lostphilosopher

如果您不指定特定文件,您应该能够提取特定提交的全部内容。喜欢:git checkout 264794319e9695ba843cd6(假设哈希的所有文件都处于正确的状态)。

pull 不恢复文件的原因是 git 将您的删除视为最近的更改,并将其应用到您要提取的任何内容之上。

(我建议在新分支中进行试验。)


s
stldoug

如果您只是想恢复已删除的文件夹,并且在删除后还有其他提交,那么您也可以直接转到 github.com 上的项目。

从 github.com,转到包含您的文件夹的最后一次提交。您应该会看到提交消息,并且在右侧有一个标有“浏览文件”的按钮。单击此按钮将带您进入该提交阶段的所有文件。

从那里您可以克隆代码或将代码下载为 zip。


S
Shygar

对我来说,由于不相关的问题,我暂时删除了一个文件夹。我没有尝试从备份中恢复它,而是运行 git restore folder/ 并将其恢复到分支最初的状态。


T
Tejas Veer

如果您必须在没有 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

可以了,好了!您已恢复已删除的文件/文件夹,您可以在您的存储库中检查它


j
justadev

对于未提交的删除,它就像这样简单:

git reset HEAD rel/path/to/deleted/directory/*