🔖

git restore と git checkout の違いを整理する

に公開

はじめに

Gitで「ファイルを元に戻したい」と思ったとき、
以前は git checkout を使うのが一般的でした。

しかし Git 2.23 から git restore という新しいコマンドが追加され、
現在は操作の目的に応じてコマンドを使い分けることが推奨されています。

本記事では、「checkoutrestoreの違い」を整理します。

git checkout は複数の役割を担っていた

かつての git checkout は、以下のような複数の用途に使われていました。

  • ブランチの切り替え
  • ファイルの復元
git checkout main.py

これでインデックス(ステージングエリア)の状態の main.py へ戻ります。

しかし、コマンドの意図がわかりづらいのが難点でした。

git restoreは復元専用のコマンド

Git 2.23 以降で使える git restore
ファイルを「元に戻す」ための専用コマンドです。

git restore main.py

作業ツリーの変更を破棄して、最新コミットの状態へ戻します。

使い分けポイント

操作内容 従来のコマンド 現在の推奨コマンド
ブランチを切り替える git checkout <ブランチ名> git switch <ブランチ名>
作業ツリーのファイルを戻す git checkout main.py git restore main.py
git add済みの変更を取り消す git checkout HEAD main.py git restore --staged main.py
過去のコミット時点に戻す git checkout <コミットID> main.py git restore --source <コミットID> main.py

※「git add 済みの変更」とは、コミット予定の変更内容を一時的にステージ(インデックス)に追加した状態のことです。

checkoutは使ってはいけない?

今でも checkoutは使えます。
ただし、意図の明確化のため、今は分離した方がよいとされています

✅ ファイルの復元なら git restore
✅ ブランチの切り替えなら git switch

おわりに

現在のGitは、コマンドを明確な意図ごとに分離させる方針になっています。

これは「わかりやすさ」「誤操作防止」のためです。

checkout を使い続けてこられた方も、
この機会に restoreswitch の利用を取り入れてみるのも良いかもしれません。

本記事が参考になれば幸いです。


🔗関連記事

Discussion