设置和配置
获取和创建项目
基本快照
分支和合并
共享和更新项目
检查和比较
修补
调试
电子邮件
外部系统
服务器管理员
指南
管理
管道命令
- 2.43.1 → 2.47.0 无更改
- 2.43.0 11/20/23
- 2.35.1 → 2.42.3 无更改
- 2.35.0 01/24/22
- 2.30.1 → 2.34.8 无更改
- 2.30.0 12/27/20
- 2.27.1 → 2.29.3 无更改
- 2.27.0 06/01/20
- 2.25.1 → 2.26.3 无更改
- 2.25.0 01/13/20
- 2.23.1 → 2.24.4 无更改
- 2.23.0 08/16/19
概要
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"
作为A
和B
的合并基础的快捷方式。您可以最多省略A
和B
中的一个,在这种情况下,它默认为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 rebase
和git pull --rebase
期间,ours和theirs可能会互换。有关详细信息,请参阅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)
-
从另一个提交中取出文件
-
从索引恢复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]套件的一部分