git restore

作業中のファイルを、記録した状態へ戻す。ステージから下ろすのにも使う。

実行前の状態

README.md を 1 回コミットしたあと、README.md に書いた 1 行を、やっぱり要らないと思った場面です。まだコミットしていない変更を捨てて、最後に記録した状態へ戻したいときに打ちます。

この状態を手元で作るなら、次の順に打ちます。

ターミナル

git init -q -b main hello
cd hello
echo "# hello" > README.md
git add README.md
git commit -q -m "README を作る"
echo "いらない行" >> README.md

最小の例と結果

戻したいファイルの名前を、git restore の後ろに書きます。

ターミナル

git status -s
 M README.md

ターミナル

git restore README.md
cat README.md
# hello
  • git restore は、うまくいくと何も表示しません。
  • 打つ前の M は、README.md が変わっているという印です。
  • 最後の cat で、足した 1 行が消えて、コミットした中身に戻っています。

成功の確認

git status に変更のファイルが 1 つも出なければ、戻っています。

ターミナル

git status
On branch main
nothing to commit, working tree clean

構文と主要オプション

書き方すること
git restore <ファイル>作業中のファイルを、ステージの内容へ戻す。add していなければ最後にコミットした状態になる。作業中の変更は消える
git restore --source=HEAD <ファイル>add 済みでも、最後にコミットした状態へ戻す。作業中の変更は消える
git restore --staged <ファイル>ステージから下ろす。ファイルの中身は変わらない
git restore --source=<コミット> <ファイル>指定したコミットの時点の中身へ戻す
git restore -p変更を塊ごとに見せて、戻すかを 1 つずつ選ぶ

失敗時の戻し方

git restore <ファイル> で捨てた変更は、元に戻せません。コミットもステージへの add もしていない変更は、Git がどこにも記録していないためです。

打つ前に、捨てる中身を確かめます。git diff で差分を見て、取っておきたいときは、ファイルに書き出してから捨てます。

ターミナル

git diff > backup.patch
git restore README.md

捨てたあとで要るとわかったら、書き出した差分を当て直します。

ターミナル

git apply backup.patch

ステージから下ろしたいだけのときは、--staged を付けます。付け忘れると、作業中の変更が消えます。

ターミナル

git restore --staged app.py

よくある疑問

--staged を付けるのと付けないのは、何が違いますか

付けると、ステージだけが変わります。ファイルの中身には触れません。付けないと、作業中のファイルが書き換わります。add の前に戻したいなら付けず、add を取り消したいなら付けます。

消したファイルを元に戻せますか

コミットしてあるファイルなら、git restore <ファイル> で戻ります。add 済みのファイルは、ステージの内容へ戻るので、最後のコミットまで戻すなら --source=HEAD を付けます。一度も記録していないファイルは、Git が持っていないので戻せません。

error: pathspec ... did not match any file(s) known to git と出ます

書いた名前のファイルを、Git が知りません。名前の綴りと、いまいるフォルダを確かめます。git status に出ている名前をそのまま使うと確かです。

確かめた Git の版 2.50.1 (Apple Git-155)確認日 2026年10月17日正本は Git 公式マニュアル (英語)

Git コマンド辞典の索引へ戻る