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 <樹狀結構>
--source=<樹狀結構>

使用給定樹狀結構中的內容還原工作目錄中的檔案。通常會透過命名與其關聯的提交、分支或標籤來指定來源樹狀結構。

如果未指定,則如果給定 --staged,則會從 HEAD 還原內容,否則從索引還原。

在特殊情況下,如果只有一個合併基準,您可以使用 "A...B" 作為 AB 的合併基準的快捷方式。您最多可以省略 AB 其中之一,在這種情況下,預設為 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 rebasegit pull --rebase 期間,ourstheirs 可能會交換。請參閱 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)
  1. 從另一個提交中取出檔案

  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] 套件的一部分

scroll-to-top