セットアップと設定
プロジェクトの取得と作成
基本的なスナップショット
ブランチとマージ
プロジェクトの共有と更新
検査と比較
パッチ適用
デバッグ
メール
外部システム
サーバー管理
- 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
を使用して、別のコミットから復元します。
これら3つのコマンドの違いについては、git[1]の「リセット、リストア、リバート」を参照してください。
このコマンドは実験的です。動作が変更される可能性があります。
オプション
-s
<tree>--source=
<tree>-
指定されたツリーのコンテンツでワークツリーファイルを復元します。関連付けられたコミット、ブランチ、またはタグを指定してソースツリーを指定するのが一般的です。
指定されていない場合、
--staged
が指定されていればHEAD
からコンテンツが復元され、それ以外の場合はインデックスから復元されます。特別な場合として、<rev-A> と <rev-B> のマージベースが正確に 1 つだけ存在する場合、
"
<rev-A>...
<rev-B>"
をショートカットとして使用できます。<rev-A>_ と <rev-B> のうち最大 1 つを省略することができ、その場合、HEAD
がデフォルトになります。 -p
--patch
-
復元元と復元場所の差分の中からハックを対話的に選択します。
--patch
モードの操作方法については、git-add[1] の「対話モード」セクションを参照してください。 -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
を 2 つ前のリビジョンに戻し、誤って 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
はワークツリーにはもう存在しませんが、ファイルグロビングはインデックス内のエントリ(シェルのワークツリー内ではなく)と一致するために使用されるため、復元されます。
現在のディレクトリ内のすべてのファイルを復元するには
$ 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]スイートの一部