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

Gitを使って開発を進めていると、「変更を取り消したい」「間違ったコミットを元に戻したい」という場面は必ず発生します。
Gitには複数の「取り消し方法」が用意されていますが、それぞれ役割・影響範囲・安全性が異なります。
この記事では、
git restoregit resetgit revert
の3つを中心に、どの状態で・どのコマンドを使うべきかを基礎から丁寧に整理します。
Contents
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 コミットIDresetには主に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 コミットIDgit revertの特徴
- 履歴は消さない
- 「取り消した」という事実が残る
- 共有リポジトリでも安全
そのため、公開済みのコミットを元に戻したい場合に最適です。
resetとrevertの決定的な違い
| 項目 | reset | revert |
|---|---|---|
| 履歴 | 書き換える | 残す |
| 安全性 | 低い | 高い |
| 共有ブランチ | 非推奨 | 推奨 |
restore・reset・revertの使い分け早見表
| 状況 | 使うコマンド |
|---|---|
| 作業中の変更を戻したい | restore |
| コミット前の整理 | restore / reset |
| 未公開コミットをやり直したい | reset |
| 公開済みの変更を取り消したい | revert |
よくある誤解と注意点
- 「取り消せば安全」という操作は存在しない
- resetやrestoreは基本的に不可逆
- revertは「なかったこと」ではなく「打ち消し」
Gitは履歴管理ツールであり、操作の意図を履歴としてどう残すかが重要です。
まとめ
- restore:コミット前の変更を戻す
- reset:コミットをなかったことにする
- revert:履歴を残したまま打ち消す
Gitで変更を取り消す際は、「どこまで戻したいのか」「履歴を残すべきか」を基準に判断すると、操作ミスを防げます。

