「間違えてコミットしてしまった!取り消したい…」
Gitを使い始めると、誰もが一度はぶつかる問題です。
コミットの取り消しには git reset と git revert の2つの方法がありますが、使い方を間違えると変更が消えてしまうこともあります。
この記事では、初心者でも安全にコミットを取り消せるように、両者の違いと使い分けを解説します。

結論から言うと、迷ったら `git revert` を使えば安全です!
git resetとgit revertの違い
まず2つの違いを理解しましょう。
| 項目 | git reset | git revert |
|---|---|---|
| 動作 | コミット履歴を書き換える | 打ち消しコミットを新しく作る |
| 履歴 | コミットが消える | コミットは残る |
| 安全性 | △ やり直しが難しい | ◎ いつでも元に戻せる |
| チーム開発 | × push済みには使うな | ◎ push済みでもOK |
| 使う場面 | まだpushしていないコミット | push済みのコミット |

一番大事な違いは「pushしたかどうか」です。pushしたコミットには絶対にresetを使わないでください!
git revert の使い方(安全・推奨)
直前のコミットを取り消す
git revert HEAD
これで「直前のコミットの変更を打ち消す」新しいコミットが作られます。
エディタが開いてコミットメッセージの入力を求められますが、デフォルトのままで大丈夫です。:wq で保存して終了しましょう。
エディタを開かずに実行したい場合:
git revert HEAD --no-edit
特定のコミットを取り消す
# コミットIDを確認
git log --oneline
# 出力例:
# abc1234 ログイン機能追加
# def5678 デザイン修正
# ghi9012 初期設定
# abc1234のコミットを取り消す
git revert abc1234
revertの仕組み
revertは「コミットを削除する」のではなく、「逆の変更を加える新しいコミットを作る」という動作です。
コミット履歴:
1. 初期設定
2. ログイン機能追加 ← これをrevert
3. Revert "ログイン機能追加" ← 打ち消しコミットが追加される
履歴が全て残るので、いつでも元に戻せるのが安全な理由です。
git reset の使い方(ローカルのみ)
- 注意:push済みのコミットにはresetを使わない
-
- git resetは**まだpushしていないコミット**にだけ使ってください。push済みのコミットをresetすると、チームメンバーに影響が出ます。
resetの3つのモード
# --soft: コミットだけ取り消し(変更はステージングに残る)
git reset --soft HEAD~1
# --mixed: コミット+ステージング取り消し(変更はファイルに残る)← デフォルト
git reset HEAD~1
# --hard: コミット+ステージング+ファイル変更を全て取り消し
git reset --hard HEAD~1
| モード | コミット | ステージング | ファイル変更 | 安全性 |
|---|---|---|---|---|
| –soft | 取り消し | 残る | 残る | ◎ |
| –mixed | 取り消し | 取り消し | 残る | ○ |
| –hard | 取り消し | 取り消し | 消える | × 危険 |
よく使うパターン
コミットメッセージを修正したい時:
git reset --soft HEAD~1
git commit -m "正しいコミットメッセージ"
コミットに含めるファイルを変えたい時:
git reset HEAD~1
# 必要なファイルだけ再度add
git add correct-file.js
git commit -m "修正版"
VSCodeでコミットを取り消す方法
コマンドを使わなくても、VSCodeのGUIでも操作できます。
ソース管理パネルを開く
左サイドバーの「ソース管理」アイコンをクリックします。
コミットの取り消し
「…」メニューから「**コミット**」→「**直前のコミットを元に戻す(Undo Last Commit)**」を選択します。これは `git reset –soft HEAD~1` と同じ動作です。

VSCodeの「Undo Last Commit」は–softモードなので、変更が消える心配はありません!
こんな時どうする?Q&A
push済みのコミットを取り消したい
git revert HEAD
git push origin main
revertを使ってください。 resetは絶対NG。
複数のコミットを取り消したい
# 直近3つのコミットをrevert
git revert HEAD~3..HEAD --no-edit
resetした変更を元に戻したい
# reflogで過去の状態を確認
git reflog
# 出力例:
# abc1234 HEAD@{0}: reset: moving to HEAD~1
# def5678 HEAD@{1}: commit: ログイン機能追加
# reset前の状態に戻す
git reset --hard def5678
git reflog は「Gitの操作履歴」です。間違えてresetしても、reflogを使えば復元できます。
Git操作をもっと学びたいなら
- 関連記事
-
- [git stashの使い方・作業を一時保存する方法](/blog/3408/)
- [git mergeのコンフリクト解決方法](/blog/3410/)
- [VSCodeでGitHubブランチを削除する方法](/blog/1652/)
- [git pullでブランチが最新にならない時の対処法](/blog/2220/)
- [VSCodeのGitHubコミット方法やpush取り消し方法](/blog/2033/)
Git・プログラミングを体系的に学ぶなら
独学で限界を感じていませんか?プロのカリキュラムなら最短でスキルが身につきます。
※無料体験・無料カウンセリングあり
まとめ:迷ったらgit revertを使おう
- この記事のポイント
-
- **push済み** → `git revert` を使う(安全)
- **pushしてない** → `git reset –soft` で取り消してやり直し
- **絶対NG** → push済みコミットに `git reset` は使わない
- 困ったら `git reflog` で操作履歴を確認
コミットの取り消しは、覚えてしまえば怖くありません。まずは git revert だけ覚えておけばOKです!

コメント