Gitで特定のファイルだけを過去のコミットに戻す方法

Gitを使っていると、こんな場面に遭遇することがあります。

  • 「このファイルだけ、以前の状態に戻したい」
  • 「リポジトリ全体は戻したくない」
  • 「特定のコミット時点の内容をピンポイントで復元したい」

本記事では、Gitで特定のファイルだけを、あるコミット時点の状態に戻す方法を、実務でそのまま使える形で解説します。


よくある誤解:reset や checkout だけでは不十分?

Gitで「戻す」と聞くと、次のコマンドを思い浮かべる人も多いと思います。

  • git reset
  • git checkout
  • git revert

しかし、これらは基本的に リポジトリ全体コミット単位 で履歴を操作するため、

「特定のファイルだけを、ある時点の内容に戻したい」

というケースには、少しオーバースペックまたは不向きです。


解決策:指定コミットの内容を「そのファイルだけ」取り出す

Gitには、あるコミット時点のファイル内容だけを、現在のワークツリーに復元する方法があります。

ここでは、最も安全で分かりやすい方法を紹介します。


方法①:git restore を使う(推奨)

※ Git 2.23 以降で利用可能

基本形

git restore --source <commit-hash> -- path/to/file

git restore \
  --source 74930128s1d887ea7051bf6c4448613d34d2 \
  -- assets/js/common.min.js

ポイント

  • --source
    → 戻したい コミットID
  • --
    → オプションとファイルパスの区切り
  • 指定したファイルだけが置き換わる
  • 他のファイルや履歴には影響しない
  • この時点ではコミットされない

方法②:旧来の git checkout を使う方法

Gitが古い環境では、以下でも同じことができます。

git checkout <commit-hash> -- path/to/file

例:

git checkout 74930128s1d887ea7051bf6c4448613d34d2 -- \
  assets/js/common.min.js

※ 現在は git restore のほうが意図が明確なため推奨されます。


差分を確認してからコミットする

ファイルを戻したあとは、必ず内容を確認しましょう。

git diff assets/js/common.min.js

問題なければ、通常通りコミットします。

git add assets/js/common.min.js
git commit -m "common.min.js を 74930128 の状態に戻す"

このようにすることで、

  • 「いつ」
  • 「どのファイルを」
  • 「どの時点に戻したか」

履歴として明確に残る のが大きなメリットです。


どのコミットに戻すか分からない場合

ファイル単位で履歴を確認すると便利です。

git log -- path/to/file

これで、そのファイルに関係するコミットだけが表示されます。


注意点

  • ワークツリーに未コミットの変更がある場合、上書きされる可能性があります
    → 必要なら git stash で退避
  • あくまで「ファイルの内容を過去に戻す」だけ
    → 履歴を書き換える操作ではない
  • チーム開発では、必ず新しいコミットとして戻すのが安全

まとめ

  • Gitでは 特定のファイルだけを過去の状態に戻せる
  • 推奨コマンドは git restore --source
  • リポジトリ全体を操作せず、安全に修正可能
  • 差分確認 → 通常コミット、という流れがベスト

「全部戻したいわけじゃない」「このファイルだけ直したい」
そんなときに、ぜひ活用してみてください。

コメント

タイトルとURLをコピーしました