設定和配置
獲取和建立專案
基本快照
分支與合併
共享和更新專案
檢查和比較
打補丁
除錯
電子郵件
外部系統
伺服器管理
指南
管理
底層命令
- 2.50.1 無更改
- 2.50.0 無變更
- 2.49.1 無更改
-
2.49.0
2025-03-14
- 2.43.1 → 2.48.2 無變更
-
2.43.0
2023-11-20
- 2.35.1 → 2.42.4 無更改
-
2.35.0
2022-01-24
- 2.30.1 → 2.34.8 無更改
-
2.30.0
2020-12-27
- 2.27.1 → 2.29.3 無更改
-
2.27.0
2020-06-01
- 2.25.1 → 2.26.3 無更改
-
2.25.0
2020-01-13
- 2.23.1 → 2.24.4 無更改
-
2.23.0
2019-08-16
概要
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] 中的“Reset、restore 和 revert”部分。
此命令是實驗性的。其行為可能會發生變化。
選項
-s
<tree>--source=
<tree>-
使用給定樹中的內容恢復工作區檔案。通常透過命名與其關聯的提交、分支或標籤來指定源樹。
如果未指定,如果給出
--staged
,內容將從HEAD
恢復;否則,從索引恢復。作為特例,如果存在且僅存在一個合併基點,則可以使用
"
<rev-A>...
<rev-B>"
作為 <rev-A> 和 <rev-B> 合併基點的快捷方式。您最多可以省略 <rev-A> 和 <rev-B> 中的一個,在這種情況下它預設為HEAD
。 -p
--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> 的 <tree> 中的已跟蹤檔案,使它們精確匹配 <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