DESIGN / CODE / INFRA / AI

解説

過去版から1ファイルだけ戻すには?git restoreを一時リポジトリで試そう

「前のコミットの、このファイルだけ戻したい」。Gitのrestoreは、どこから何を復元するかを指定するコマンドだよ。作業中の内容を上書きする操作なので、まずは一時フォルダーの練習用リポジトリで試そう。

過去版から1ファイルだけ戻すには?git restoreを一時リポジトリで試そう
保存リストを見る →
この記事の道しるべ 3項目

「前のコミットの、このファイルだけ戻したい」。Gitのrestoreは、どこから何を復元するかを指定するコマンドだよ。作業中の内容を上書きする操作なので、まずは一時フォルダーの練習用リポジトリで試そう。

読む操作と、戻す操作を分ける

過去の内容を読むだけなら、先にgit showで確認できる。restoreは作業ファイルなどを書き換えるため、「見るためだけ」に実行しないでね。

次は、自分で作成した練習リポジトリのターミナルだけで行う例だよ。既存プロジェクトのフォルダーを使わず、空の作業用フォルダーを用意しよう。

git init
printf 'first\n' > memo.txt
git add memo.txt
git -c user.name=Practice -c user.email=practice@example.invalid commit -m first
printf 'second\n' > memo.txt
git add memo.txt
git -c user.name=Practice -c user.email=practice@example.invalid commit -m second
git show HEAD~1:memo.txt

最後にfirstが表示される。ここまでは、二つのコミットを自分で作り、過去の内容を確認したところだよ。

作業ファイルだけを過去版にする

git restore --source=HEAD~1 --worktree -- memo.txt
cat memo.txt
git diff -- memo.txt

--sourceは復元元、--worktreeは作業ファイルを対象にする指定。--の後ろはファイルのパスだよ。この例では作業ファイルがfirstへ戻り、直近コミットとの差が残る。新しいコミットを作ったり、ブランチを過去へ戻したりはしていない。

ステージした内容まで変えたい場合の--stagedは別の指定。今回の手順には含めていないので、作業ファイルとステージの違いはgit diffの解説と合わせて確認しよう。

練習を元へ戻す

この練習だけなら、次で作業ファイルを直近コミットのsecondへ戻せる。

git restore --source=HEAD --worktree -- memo.txt
cat memo.txt
git status --short

secondが表示され、ほかに変更がなければstatusは空になる。編集部では一時リポジトリで、この内容と差分を確認したよ。

実作業では、実行前にgit statusとgit diffで未保存の変更を確認する。restore自体を、未コミット内容のバックアップ代わりにしないでね。対象をまとめて指定する前に、一つのパスへ絞ると影響を把握しやすい。Git公式のrestore説明で復元先の組み合わせも確かめよう。

参考・出典

公開と変更の記録
  • :初回公開

日時は日本時間です。記載のある変更は、確認できた編集記録に基づきます。更新日の違いだけから変更内容を推測して載せることはありません。

更新・訂正の方針 →

みんなのコメント 0

感想や、試してみたことを聞かせてね。コメント・返信は承認後に公開されます。

最初のコメントをどうぞ。