设置和配置
获取和创建项目
基本快照
分支和合并
分享和更新项目
检查和比较
修补
调试
电子邮件
外部系统
服务器管理员
指南
管理
管道命令
- 2.43.1 → 2.44.0 无更改
- 2.43.0 11/20/23
- 2.35.1 → 2.42.1 无更改
- 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
概要
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>
-
使用给定树中的内容恢复工作树文件。通常通过指定与之关联的提交、分支或标签来指定源树。
如果没有指定,则从
HEAD
(如果给定--staged
)恢复内容,否则从索引恢复。作为特殊情况,如果
A
和B
只有一个合并基础,你可以使用"A...B"
作为A
和B
的合并基础的快捷方式。你最多可以省略A
和B
中的一个,在这种情况下,它默认为HEAD
。 - -p
- --patch
-
在还原源和还原位置之间的差异中交互选择块。请参阅 git-add[1] 的“交互模式”部分,了解如何操作
--patch
模式。请注意,
--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
-
在稀疏检出模式下,默认情况下仅更新与 $GIT_DIR/info/sparse-checkout 中的
<pathspec>
和稀疏模式匹配的条目。此选项忽略稀疏模式,并无条件恢复<pathspec>
中的任何文件。 - --recurse-submodules
- --no-recurse-submodules
-
如果
<pathspec>
命名了一个活动子模块,并且恢复位置包括工作树,则仅当提供此选项时才会更新子模块,在这种情况下,其工作树将恢复到超级项目中记录的提交,并且任何本地修改将被覆盖。如果未使用任何内容(或--no-recurse-submodules
),则不会更新子模块工作树。就像 git-checkout[1] 一样,这将分离子模块的HEAD
。 - --overlay
- --no-overlay
-
在覆盖模式下,该命令在恢复时绝不会删除文件。在非覆盖模式下,将删除未出现在
--source
树中的已跟踪文件,以使其与<tree>
完全匹配。默认值为非覆盖模式。 - --pathspec-from-file=<file>
-
Pathspec 在
<file>
中传递,而不是命令行参数。如果<file>
正好为-
,则使用标准输入。Pathspec 元素由 LF 或 CR/LF 分隔。Pathspec 元素可以引用,如配置变量core.quotePath
所述(请参阅 git-config[1])。另请参阅--pathspec-file-nul
和全局--literal-pathspecs
。 - --pathspec-file-nul
-
仅在使用
--pathspec-from-file
时才有意义。Pathspec 元素由 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 .
或还原具有顶级 pathspec 魔术的所有工作树文件(请参阅 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] 套件的一部分