今回は、Gitで特定のファイルだけ元に戻す方法について解説します。
Gitを使っていると、次のような場面はないでしょうか。
- 間違ってファイルを編集してしまった
- 1つのファイルだけ以前の状態に戻したい
- 他の変更は残したまま特定のファイルだけ復元したい
git restoreやgit checkoutの違いが分からない
このような場合は、Gitの「ファイル単位での復元」を使うことで解決できます。
この記事では、特定ファイルだけを元に戻す方法や、過去のコミットから復元する方法について解説します。
Gitで特定のファイルだけ戻す方法
結論から言うと、現在の変更を取り消してファイルを元に戻す場合は、git restore を使用します。
git restore ファイル名
例えば、index.html を元に戻す場合は次のようになります。
git restore index.html
実行すると、そのファイルの変更内容だけが取り消され、最後にコミットされた状態に戻ります。
※以前はgit checkoutが使われていました。
ブランチ切り替え(switch)とファイルの復元(restore)という全く異なる機能が1つのコマンドに同居していて分かりにくかったため、Git 2.23から機能が分割されました。
現在ではgit restoreを使うほうが推奨されています。
実行例
変更前の状態を確認します。
git status
modified: index.html
modified: style.css
index.html のみ戻します。
git restore index.html
再度確認します。
git status
modified: style.css
このように、他のファイルはそのまま残しつつ、指定したファイルだけ最後にコミットした状態に復元できます。
過去のコミットから特定ファイルだけ復元する方法
過去のコミットにあるファイルを現在の作業ブランチへ復元したい場合は、git restore --source を使用します。
git restore --source=コミットID ファイル名
例えば、1つ前のコミットにあった状態へ戻す場合です。
git restore --source=HEAD~1 index.html
実行すると、index.html だけが1つ前のコミットの内容になります。
コミット履歴を確認する
対象のコミットIDが分からない場合は、先に履歴を確認します。
git log --oneline
実行例です。
a1b2c3d fix header
e4f5g6h update css
i7j8k9l first commit
左の文字列がコミットIDです。
コミットIDを指定して、そのときのコミットからファイルを復元できます。
git restore --source=e4f5g6h index.html
Gitで特定ファイルだけの変更前の最新コミット状態に戻す
ステージング済みのファイルを元に戻したいケースもあります。
例えば次の状態です。
git add index.html
この場合、まずステージングを解除します。
git restore --staged index.html
実行後、変更内容は残ったままステージングだけ解除されます。
git status
modified: index.html
さらに変更内容も破棄したい場合は、続けて実行します。
git restore index.html
一度に変更内容の破棄もしたい場合には、こちらを使うことができます。
git restore --staged --worktree index.html
また、以下のように「復元元(-s)に HEAD コミットを指定する」ことでも、同じようにステージングと変更を同時に最新コミット状態へ戻せます。
git restore -s HEAD index.html
Gitで複数ファイルをまとめて最新コミット状態に戻す
複数ファイルを同時に復元することも可能です。
git restore index.html style.css script.js
指定したファイルのみ元の状態に戻ります。
また、特定ディレクトリごと戻すこともできます。
git restore src/
Gitで特定ファイルだけ戻す際の注意点
Gitで特定ファイルだけ戻す際の注意点についてです。
復元後は元に戻せない
git restore で変更を破棄すると、その変更内容は失われます。
コミットしていない変更は復元できないため、必要な場合は事前に退避しておきましょう。
git stash
git stashについては、こちらの記事も参考にしてみてください。
コミットを戻すわけではない
git restore はファイルの内容を戻すコマンドです。
コミット履歴そのものは変更されません。
履歴を戻したい場合は、以下の記事を参考にしてください。
古いGitではgit checkoutを使う
Git 2.23以前では git restore が利用できません。
その場合は次のコマンドを使用します。
git checkout -- index.html
Git 2.23以降は、より分かりやすい git restore の利用が推奨されています。
Gitで特定ファイルだけ戻す方法まとめ
Gitで特定のファイルだけ元に戻したい場合は、git restoreを使用します。
現在の変更を破棄する場合はこちらです。
git restore ファイル名
過去のコミットから復元する場合はこちらです。
git restore --source=コミットID ファイル名
ポイントをまとめると次の通りです。
- 特定ファイルだけ元に戻せる
- 他のファイルへの変更はそのまま残せる
- 過去のコミットから復元することも可能
- ステージング解除は
git restore --staged - 古いGitでは
git checkout -- ファイル名を使用する
「1つのファイルだけ戻したい」という場面はGitでよくあります。
まずは git restoreを覚えておくと、多くのケースに対応できるかと思います。

コメント