Gitで変更を取り消す方法まとめ|restore・reset・revertの違いを基礎から完全整理

Gitで変更を取り消す方法を解説する記事のアイキャッチ画像。restore・reset・revertの違いをイメージした図。
Gitで変更を取り消す代表的な方法であるrestore・reset・revertの違いを視覚的に表現したアイキャッチ画像。

Gitを使って開発を進めていると、「変更を取り消したい」「間違ったコミットを元に戻したい」という場面は必ず発生します。
Gitには複数の「取り消し方法」が用意されていますが、それぞれ役割・影響範囲・安全性が異なります。

この記事では、

  • git restore
  • git reset
  • git revert

の3つを中心に、どの状態で・どのコマンドを使うべきかを基礎から丁寧に整理します。

Gitで「変更を取り消す」とはどういう意味か

Gitでの「取り消し」は、単に元に戻すことではありません。
どの場所の変更を、どの履歴レベルで、どう扱うかを選ぶ操作です。

Gitには主に以下の3つの領域があります。

  • 作業ディレクトリ
  • ステージングエリア
  • リポジトリ(コミット履歴)

それぞれに対して、異なる取り消し方法が用意されています。
この前提を理解しておくと、各コマンドの違いが明確になります。

※ Gitの基本構造については
Gitのステージングエリアとは何か|addの仕組みをやさしく解説
の記事も参考になります。

git restore|作業中・ステージングの変更を戻す

git restoreの役割

git restore は、コミット前の変更を取り消すためのコマンドです。
主に以下の用途で使われます。

  • 作業ディレクトリの変更を元に戻す
  • ステージングした変更を取り消す

作業ディレクトリの変更を取り消す

git restore ファイル名

この操作により、ファイルは直前のコミット状態に戻ります。
まだコミットしていない変更は失われるため、注意が必要です。

ステージングを取り消す(アンステージ)

git restore --staged ファイル名

この場合、

  • ステージングエリアからは外れる
  • 作業ディレクトリの変更は残る

という挙動になります。

git restoreの特徴

  • コミット履歴には影響しない
  • 個人作業中のミス修正に最適
  • 取り消した変更は基本的に戻せない

git reset|コミット状態を巻き戻す

git resetの役割

git reset は、コミットそのものをなかったことにする操作です。
履歴を書き換えるため、扱いには注意が必要です。

git reset コミットID

resetには主に3つのモードがあります。

–soft|コミットだけを取り消す

git reset --soft HEAD~1
  • コミット:取り消し
  • ステージング:残る
  • 作業ディレクトリ:残る

「コミットメッセージを修正したい」場合によく使われます。

–mixed(デフォルト)|ステージングも取り消す

git reset HEAD~1
  • コミット:取り消し
  • ステージング:取り消し
  • 作業ディレクトリ:残る

変更内容は残しつつ、整理し直したいときに便利です。

–hard|すべて完全に巻き戻す

git reset --hard HEAD~1
  • コミット:取り消し
  • ステージング:消える
  • 作業ディレクトリ:消える

変更は完全に失われます。
取り扱いには細心の注意が必要です。

git resetの注意点

  • 履歴を書き換える
  • 共有ブランチでは基本的に使用しない
  • 個人作業・未公開コミット向け

git revert|安全に変更を打ち消す

git revertの役割

git revert は、過去のコミットを打ち消す新しいコミットを作成するコマンドです。

git revert コミットID

git revertの特徴

  • 履歴は消さない
  • 「取り消した」という事実が残る
  • 共有リポジトリでも安全

そのため、公開済みのコミットを元に戻したい場合に最適です。

resetとrevertの決定的な違い

項目resetrevert
履歴書き換える残す
安全性低い高い
共有ブランチ非推奨推奨

restore・reset・revertの使い分け早見表

状況使うコマンド
作業中の変更を戻したいrestore
コミット前の整理restore / reset
未公開コミットをやり直したいreset
公開済みの変更を取り消したいrevert

よくある誤解と注意点

  • 「取り消せば安全」という操作は存在しない
  • resetやrestoreは基本的に不可逆
  • revertは「なかったこと」ではなく「打ち消し」

Gitは履歴管理ツールであり、操作の意図を履歴としてどう残すかが重要です。

まとめ

  • restore:コミット前の変更を戻す
  • reset:コミットをなかったことにする
  • revert:履歴を残したまま打ち消す

Gitで変更を取り消す際は、「どこまで戻したいのか」「履歴を残すべきか」を基準に判断すると、操作ミスを防げます。

関連記事