Git
English ▾ 主题 ▾ 最新版本 ▾ git-restore 最后更新于 2.43.0

名称

git-restore - 恢复工作树文件

概要

git restore [<options>] [--source=<tree>] [--staged] [--worktree] [--] <pathspec>…​
git restore [<options>] [--source=<tree>] [--staged] [--worktree] --pathspec-from-file=<file> [--pathspec-file-nul]
git restore (-p|--patch) [<options>] [--source=<tree>] [--staged] [--worktree] [--] [<pathspec>…​]

描述

使用恢复源中的某些内容恢复工作树中指定路径的内容。如果路径已跟踪但在恢复源中不存在,则将其删除以匹配源。

此命令也可用于使用--staged恢复索引中的内容,或使用--staged --worktree恢复工作树和索引。

默认情况下,如果给出--staged,则从HEAD恢复内容,否则从索引恢复。使用--source从不同的提交恢复。

有关这三个命令之间差异的信息,请参阅git[1]中的“重置、恢复和回退”。

此命令为实验性命令。行为可能会发生变化。

选项

-s <tree>
--source=<tree>

使用给定树中的内容恢复工作树文件。通常通过命名与其关联的提交、分支或标签来指定源树。

如果未指定,则如果给出--staged,则从HEAD恢复内容,否则从索引恢复。

作为特殊情况,如果只有一个合并基础,则可以使用"A...B"作为AB的合并基础的快捷方式。您可以最多省略AB中的一个,在这种情况下,它默认为HEAD

-p
--patch

交互式地选择恢复源和恢复位置之间差异中的块。有关如何操作--patch模式的信息,请参阅git-add[1]的“交互模式”部分。

请注意,--patch可以不接受路径规范,并将提示恢复所有已修改的路径。

-W
--worktree
-S
--staged

指定恢复位置。如果两个选项均未指定,则默认恢复工作树。指定--staged将仅恢复索引。指定两者将恢复两者。

-q
--quiet

静默,抑制反馈消息。表示--no-progress

--progress
--no-progress

当它连接到终端时,默认情况下会在标准错误流上报告进度状态,除非指定了--quiet。此标志即使未连接到终端,也允许报告进度,而不管--quiet如何。

--ours
--theirs

从索引恢复工作树中的文件时,对未合并的路径使用阶段 #2(ours)或 #3(theirs)。在从树状对象检出路径时(即使用--source选项),不能使用此选项。

请注意,在git rebasegit pull --rebase期间,ourstheirs可能会互换。有关详细信息,请参阅git-checkout[1]中相同选项的说明。

-m
--merge

从索引恢复工作树上的文件时,在未合并的路径中重新创建冲突的合并。在从树状对象检出路径时(即使用--source选项),不能使用此选项。

--conflict=<style>

与上面的--merge选项相同,但更改冲突块的呈现方式,覆盖merge.conflictStyle配置变量。可能的值为“merge”(默认值)、“diff3”和“zdiff3”。

--ignore-unmerged

从索引恢复工作树上的文件时,如果存在未合并的条目且未指定--ours--theirs--merge--conflict,则不会中止操作。工作树上的未合并路径保持不变。

--ignore-skip-worktree-bits

在稀疏检出模式下,默认情况下仅更新与<pathspec>和$GIT_DIR/info/sparse-checkout中的稀疏模式匹配的条目。此选项忽略稀疏模式并无条件地恢复<pathspec>中的任何文件。

--recurse-submodules
--no-recurse-submodules

如果<pathspec>命名一个活动子模块并且恢复位置包含工作树,则仅在给出此选项时才会更新子模块,在这种情况下,其工作树将恢复到超级项目中记录的提交,并覆盖任何本地修改。如果未使用任何内容(或--no-recurse-submodules),则不会更新子模块的工作树。与git-checkout[1]一样,这将分离子模块的HEAD

--overlay
--no-overlay

在覆盖模式下,命令在恢复时永远不会删除文件。在非覆盖模式下,--source树中未出现的跟踪文件将被删除,以使其完全匹配<tree>。默认模式为非覆盖模式。

--pathspec-from-file=<file>

路径规范传递到<file>而不是命令行参数。如果<file>正好是-,则使用标准输入。路径规范元素以 LF 或 CR/LF 分隔。路径规范元素可以根据配置变量core.quotePath进行引用(请参阅git-config[1])。另请参阅--pathspec-file-nul和全局--literal-pathspecs

--pathspec-file-nul

仅在使用--pathspec-from-file时才有意义。路径规范元素以 NUL 字符分隔,所有其他字符都按字面意思理解(包括换行符和引号)。

--

不要将任何更多参数解释为选项。

<pathspec>…​

限制受操作影响的路径。

有关更多详细信息,请参阅gitglossary[7]中的pathspec条目。

示例

以下序列切换到master分支,将Makefile恢复到两个修订版之前,错误地删除了hello.c,并从索引中将其取回。

$ git switch master
$ git restore --source master~2 Makefile  (1)
$ rm -f hello.c
$ git restore hello.c                     (2)
  1. 从另一个提交中取出文件

  2. 从索引恢复hello.c

如果要恢复所有 C 源文件以匹配索引中的版本,您可以说

$ git restore '*.c'

请注意*.c周围的引号。即使hello.c不再位于工作树中,它也将被恢复,因为文件通配符用于匹配索引中的条目(而不是shell中的工作树)。

要恢复当前目录中的所有文件

$ git restore .

或使用top路径规范魔法恢复所有工作树文件(请参阅gitglossary[7]

$ git restore :/

要将索引中的文件恢复为与HEAD中的版本匹配(这与使用git-reset[1]相同)

$ git restore --staged hello.c

或者您可以恢复索引和工作树(这与使用git-checkout[1]相同)

$ git restore --source=HEAD --staged --worktree hello.c

或更实用但可读性较差的简写形式

$ git restore -s@ -SW hello.c

另请参阅

Git

git[1]套件的一部分

scroll-to-top