【Git】過去の特定ファイルだけ元に戻す方法|checkout・restoreの実例付き

【Git】過去の特定ファイルだけ元に戻す方法|checkout・restoreの実例付き Git

誤って上書きしてしまったファイルや、過去の特定時点の内容に戻したいファイルだけを復元したい場面はGit運用でよくあります。
本記事では、リポジトリ全体ではなく特定ファイルだけを過去の状態に戻す方法を、git checkoutgit restoreの両方で解説します。
バージョン管理を活用すれば、無駄な作業を繰り返すことなく安全に元の状態へ戻せます。

過去バージョンのコミットハッシュを調べる

まずは戻したいファイルの過去の状態が含まれるコミットを特定します。
git log--オプションを付けると、特定ファイルに関する履歴だけを確認できます。

# 特定ファイルの履歴を表示
git log --oneline -- path/to/file.txt

出力例:

e3f1a2b Fix typo in file.txt
7b9c8d4 Update file.txt content
1a2b3c4 Initial commit of file.txt

この場合、戻したい状態のコミットハッシュをメモします(例では7b9c8d4)。

方法1:git checkoutで特定ファイルを復元

旧来の方法ではgit checkout <commit> -- <file>を使います。
これにより、指定コミット時点の内容が作業ツリーに展開されます。

# コミット7b9c8d4時点のfile.txtを復元
git checkout 7b9c8d4 -- path/to/file.txt

この時点ではまだコミットされていないので、変更内容を確認してからgit addし、必要ならコミットします。

git add path/to/file.txt
git commit -m "Revert file.txt to state from commit 7b9c8d4"

方法2:git restoreで特定ファイルを復元

Git 2.23以降では、git restoreが推奨されています。構文はcheckoutより分かりやすく、ファイル復元に特化しています。

# コミット7b9c8d4時点のfile.txtを復元
git restore --source 7b9c8d4 path/to/file.txt

こちらも作業ツリーだけが変更されるため、内容を確認してからステージングとコミットを行います。

git add path/to/file.txt
git commit -m "Restore file.txt from commit 7b9c8d4"

方法3:最新コミット時点の状態に戻す

もし直近の変更だけを取り消して、最後にコミットした状態に戻したい場合は、コミットハッシュを指定せずに実行できます。

# checkoutで最新コミット状態に戻す
git checkout -- path/to/file.txt

# restoreで最新コミット状態に戻す
git restore path/to/file.txt

この場合はステージングは不要で、作業ツリーが直接更新されます。

注意点と安全策

過去コミットの内容を反映すると、それ以降の変更は作業ツリーから失われます。
念のためgit stashで現在の変更を退避してから実行すると安全です。

# 現在の変更を退避
git stash push -m "temp-backup"

# 復元後、必要ならstashを戻す
git stash pop

おわりに

Gitでは、ファイル単位で過去の内容を復元することで、必要な部分だけをピンポイントで修正できます。
旧来のcheckoutと新しいrestoreの両方を知っておくと、バージョンや環境に応じて柔軟に対応可能です。
復元前には必ずコミット履歴を確認し、必要に応じて作業内容を退避してから実行することが安全運用のポイントです。