Git
日本語 ▾ トピック ▾ 最新バージョン ▾ git-restore は 2.43.0 で最後に更新されました

NAME

git-restore - 作業ツリーのファイルを復元する

SYNOPSIS

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>…​]

DESCRIPTION

指定されたパスを作業ツリー内で復元元から取得した内容で復元します。パスが追跡対象でありながら、復元元に存在しない場合、ソースに合わせて削除されます。

このコマンドは、--staged を使用してインデックスの内容を復元したり、--staged --worktree を使用して作業ツリーとインデックスの両方を復元したりするためにも使用できます。

デフォルトでは、--staged が指定されている場合、内容は HEAD から復元され、それ以外の場合はインデックスから復元されます。別のコミットから復元するには、--source を使用します。

3つのコマンドの違いについては、git[1] の「リセット、復元、および元に戻す」を参照してください。

このコマンドは実験的なものです。動作が変更される可能性があります。

OPTIONS

-s <tree>
--source=<tree>

指定されたツリーの内容を使用して、作業ツリーのファイルを復元します。ソースツリーは、それに関連付けられたコミット、ブランチ、またはタグを指定するのが一般的です。

指定しない場合、--staged が指定されている場合は HEAD から、そうでない場合はインデックスから内容が復元されます。

特別なケースとして、マージベースが1つしかない場合、"A...B"AB のマージベースのショートカットとして使用できます。AB のうち最大1つを省略することができ、その場合はデフォルトで HEAD になります。

-p
--patch

復元元と復元先の差分から対話的に hunk を選択します。--patch モードの操作方法については、git-add[1] の「対話モード」セクションを参照してください。

--patch は pathspec を受け付けず、変更されたすべてのパスを復元するかどうかを尋ねることに注意してください。

-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 中に、ourstheirs が入れ替わって表示される場合があることに注意してください。詳細については、git-checkout[1] の同じオプションの説明を参照してください。

-m
--merge

インデックスから作業ツリー内のファイルを復元する場合、マージされていないパスで競合するマージを再作成します。このオプションは、ツリー状のものからパスをチェックアウトする場合は使用できません(つまり、--source オプションを使用する場合)。

--conflict=<style>

上記の --merge オプションと同じですが、競合する hunk の表示方法を変更し、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> と完全に一致するようにします。デフォルトは非オーバーレイモードです。

--pathspec-from-file=<file>

Pathspec は、コマンドライン引数の代わりに <file> で渡されます。<file> がちょうど - の場合、標準入力が使用されます。Pathspec 要素は、LF または CR/LF で区切られます。Pathspec 要素は、構成変数 core.quotePathgit-config[1] を参照)で説明されているように引用符で囲むことができます。--pathspec-file-nul およびグローバル --literal-pathspecs も参照してください。

--pathspec-file-nul

--pathspec-from-file でのみ意味があります。Pathspec 要素は NUL 文字で区切られ、他のすべての文字は文字どおりに解釈されます(改行と引用符を含む)。

--

これ以上の引数をオプションとして解釈しないでください。

<pathspec>…​

操作の影響を受けるパスを制限します。

詳細については、gitglossary[7]pathspec エントリを参照してください。

EXAMPLES

次のシーケンスでは、master ブランチに切り替え、Makefile を 2 つ前のリビジョンに戻し、誤って 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 は、シェルによるファイルグロビングが(作業ツリーではなく)インデックス内のエントリを照合するために使用されるため、作業ツリーにはもう存在しませんが、復元されます。

現在のディレクトリ内のすべてのファイルを復元するには

$ git restore .

または、top 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] スイートの一部

scroll-to-top