我已删除文件夹中的所有内容,并且该文件夹为空。我的远程仓库中仍然有一个副本。但是当我这样做时,git pull
它没有放回已删除的文件,是不是应该这样做?
所以我做了一些研究,发现您可以通过执行以下操作来还原文件
git checkout <revision> -- <name of file>
但这仅适用于文件。
如何检索目录中的所有文件?
我已删除文件夹中的所有内容,并且该文件夹为空。我的远程仓库中仍然有一个副本。但是当我这样做时,git pull
它没有放回已删除的文件,是不是应该这样做?
所以我做了一些研究,发现您可以通过执行以下操作来还原文件
git checkout <revision> -- <name of file>
但这仅适用于文件。
如何检索目录中的所有文件?
Answers:
您可以使用文件进行的所有操作,也可以使用文件夹进行的操作。
如果尚未建立索引(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>
然后,使用caret(^
)符号在提交之前检出版本:
git checkout <deleting_commit>^ -- <file_path>
git reset --hard <revision>
How can I retrieve all the files inside the directory
表示目录及其文件。但是令人惊讶的是,该命令对我也不起作用。我记得一年前所做的。
git checkout -- path
或git checkout -- 'path/*'
。在您的示例中,您删除git rm
了OP似乎没有执行的操作。我已经为这种情况添加了说明。谢谢!
git checkout "<deleting_commit>^" -- <file_path>
如果尚未提交更改,则可以还原内容或目录:
git checkout -- removed_directory
如果要还原所有更改,请执行以下操作:
git reset --hard HEAD
git checkout -- removed_directory
为我工作,但我之前已经创建了该目录(通过该目录中的checkout
一个文件)。创建后,所有文件都通过此命令还原到文件夹中。
对我来说唯一有效的方法是在另一个文件夹中签出仓库。假设当前仓库位于中/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 2.24.0开始,有一个实验性的新git命令:git restore
git restore --staged some/deleted/folder
您可以使用git restore恢复文件或文件夹。
git restore --source master~1 "PATH_IN_YOUR_REPO"
在这里,高手〜1将恢复您的文件夹,从你的主分支“1”修改回来。
git status
会提示您要执行的命令