設定與配置
取得與建立專案
基本快照
分支與合併
分享與更新專案
檢查與比較
修補
除錯
電子郵件
外部系統
伺服器管理
指南
管理
底層命令
- 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 <樹狀結構>
- --source=<樹狀結構>
-
使用給定樹狀結構中的內容還原工作目錄中的檔案。通常會透過命名與其關聯的提交、分支或標籤來指定來源樹狀結構。
如果未指定,則如果給定
--staged
,則會從HEAD
還原內容,否則從索引還原。在特殊情況下,如果只有一個合併基準,您可以使用
"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=<樣式>
-
與上述的
--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>
中傳遞,而不是命令列引數。如果<file>
恰好是-
,則會使用標準輸入。路徑規範元素是以 LF 或 CR/LF 分隔。路徑規範元素可以加上引號,如同配置變數core.quotePath
(請參閱 git-config[1]) 的說明。另請參閱--pathspec-file-nul
和全域--literal-pathspecs
。 - --pathspec-file-nul
-
僅在搭配
--pathspec-from-file
時才有意義。路徑規範元素是以 NUL 字元分隔,且所有其他字元都會以逐字方式解讀 (包括換行符號和引號)。 - --
-
請勿將任何其他引數解讀為選項。
- <路徑規範>…
-
限制作業影響的路徑。
如需更多詳細資訊,請參閱 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
也會還原,即使它不再位於工作目錄中,因為檔案 globbing 用於比對索引中的項目 (不是 shell 在工作目錄中比對)。
若要還原目前目錄中的所有檔案
$ git restore .
或使用最上層路徑規範魔法 (請參閱 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] 套件的一部分