我已经删除了文件夹内的所有内容,该文件夹现在为空。我在远程仓库中还有一个备份。但是,当我执行git pull
时,它并没有恢复被删除的文件,难道不应该这样吗?
因此,我进行了一些研究,发现可以通过执行git checkout <revision> -- <name of file>
来恢复单个文件。
但是这仅适用于单个文件。
那么如何检索目录中的所有文件呢?
我已经删除了文件夹内的所有内容,该文件夹现在为空。我在远程仓库中还有一个备份。但是,当我执行git pull
时,它并没有恢复被删除的文件,难道不应该这样吗?
因此,我进行了一些研究,发现可以通过执行git checkout <revision> -- <name of file>
来恢复单个文件。
但是这仅适用于单个文件。
那么如何检索目录中的所有文件呢?
所有你可以对文件做的事情,你也可以用文件夹来做。
另外请注意在Git代码库中查找并恢复已删除的文件
如果你还没有将更改加入索引(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/*
【无效】(http://pastebin.com/n2APK8ee)注意:问题是如何恢复文件夹而不是文件。 - gmangit checkout -- path
或 git checkout -- 'path/*'
。在您的示例中,您使用 git rm
进行删除,而 OP 似乎没有这样做。我已经为这种情况添加了说明。谢谢! - Nick Volynkingit checkout "<deleting_commit>^" -- <file_path>
- Maor你可以使用 git restore 来恢复文件或文件夹。
git restore --source master~1 "PATH_IN_YOUR_REPO"
这里,大师~1将您的文件夹恢复到您的主分支后退了“1”个版本。
git restore --source=HEAD~2 "Path_To_Restore"
。顺便说一下,它可以是相对路径。 - v-andrew如果您尚未提交更改,您可以还原内容或目录:
git checkout -- removed_directory
如果你想要撤销所有更改,请执行以下操作:
git reset --hard HEAD
git checkout -- removed_directory
无效。 (翻译:The command git checkout -- removed_directory
is ineffective, as per the provided link http://pastebin.com/0UKh07Fe.) - gmangit checkout -- removed_directory
对我很有效,但在此之前我已经创建了这个目录(通过 checkout
在该目录中的某个文件)。创建后,所有文件都通过此命令恢复到文件夹中。 - Boolean_Type我因为一些无关的问题暂时删除了一个文件夹。我没有尝试从备份中恢复它,而是仅运行git restore folder/
命令,将其恢复到分支最初的状态。
/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
以下是关于IT技术的示例:
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将您的删除视为更近期的更改,并将其应用于您正在拉取的任何内容之上。对于未提交的删除操作,只需要执行以下简单命令:
git reset HEAD rel/path/to/deleted/directory/*
git status
会给你提示要运行哪些命令。 - Tavian Barnes