1. ホーム
  2. 記事一覧
  3. git revertとgit resetの違い|失敗しないコミット取り消し方

2025.09.10

git revertとgit resetの違い|失敗しないコミット取り消し方

はじめに

Gitでの開発中に「間違ったコミットをしてしまった」「過去の状態に戻したい」という場面に遭遇することはありませんか?そんなときに頼りになるのが、git revertgit resetです。

この2つのコマンドはどちらも「コミットを取り消す」ために使われますが、実際には動作がまったく異なります。使い方を誤ると、コミットが完全に消えてしまったり、自分の履歴だけが書き換わってチームメンバーと食い違ったりすることがあります。その結果、pushができなかったり、pullでエラーが出て、チーム全体の開発が止まってしまうこともあります。

本記事では、この2つのコマンドの基本から実践的な使い分けまで、初心者の方にも分かりやすく解説していきます。

Gitについての基本

GitとGitHubの基本を知りたい方は、以下の記事がおすすめです。

▼Gitを基礎から学びたい方はこちら

【初心者向け】GitHubとは?必須知識と使い方について解説!

https://envader.plus/article/68

▼Gitコマンド早見表はこちら

必見!現場で役立つGitコマンド29選をまとめて紹介!

https://envader.plus/article/402

コミットの取り消し:どちらのコマンドを使う?

git revertgit reset どちらを使うかは、そのコミットがリモートにpushされているかどうかで判断します。

以下の判断フローを使えば、状況に応じた最適な取り消し方法がすぐにわかります。

この基準を押さえておけば、コミット取り消しで混乱せず、安全に履歴を管理できます。次にそれぞれのコマンドについて、詳しく確認していきましょう。

git revertとは

git revert は、指定したコミットの変更を打ち消す新しいコミットを作成するコマンドです。元のコミットそのものを消すのではなく、「変更を取り消した」という記録を残すのが大きな特徴です。

git revertコマンドの主な用途

git revert は、主に次のような場面で活躍します。

  • リモートにpush済みのコミットを、履歴を壊さずに取り消したいとき
  • チーム全員に「どの変更を取り消したか」という記録を残す必要がある場合
  • 本番環境に誤って反映した変更を、他の人の作業に影響を与えず元に戻したいとき

git revertの基本的な仕組み

git revert の変更を打ち消す新しいコミットを作成するとは、特定のコミットで加えた変更内容だけを元に戻す操作を意味します。

例えば次のようにhello.txtにテキストを追加していくとします。コミットCで git revert した場合、Cの時点で追加したテキストを取り消す、新しいコミットDが作成されます。

git revertのオプション

git revert の用途に応じて動作を調整できる代表的なオプションをまとめます。

オプション説明
--no-edit自動生成メッセージをそのまま使う(エディタを開かない)
-m / --mainlineマージコミットをrevertするときに、親ブランチを指定する
-n / --no-commitコミットせずに取り消し内容だけステージに残す

git revertオプションのメリット・デメリット

git revertは安全性が高い反面、オプションの選び方を誤ると手間が増えることもあります。以下に主なオプションの特性をまとめました。

オプションメリットデメリット
--no-edit操作がシンプルで作業が早いメッセージの編集ができない
-m / --mainlineマージのrevertに対応できる親の指定ミスに注意が必要
-n / --no-commit複数のrevertをまとめて整理できるコミットし忘れると変更が残る恐れがある

git revert は、履歴を壊さずに誤りを修正できるという点でとても信頼性の高い方法です。特に本番運用やチーム開発では、「取り消したことを明示的に記録できる」点が大きなメリットとなります。

▼「git revert」の詳しい手順や活用方法はこちらで解説しています

【初心者向け】git revertでコミットを取り消す方法|安全な取り消しと基本の使い方をわかりやすく解説

https://envader.plus/article/543

一方で、「複数のコミットをひとつにまとめて履歴をすっきり整理したい」という場合には、revertではなくsquashを使う方が適しています。両方の特徴を理解しておくことで、状況に応じた柔軟な履歴管理が可能になります。

▼「git squash」の方法はこちらで詳しく解説しています

gitのコミット履歴を整理するためにsquashを使いこなそう

https://envader.plus/article/268

git resetとは

git reset は、ローカルの履歴を取り消してやり直すためのコマンドです。

リモートにpushする前のコミットを取り消したいときに使います。これは、「まだ共有していない作業をなかったことにする」場面で活躍します。

git resetコマンドの主な用途

git reset は、主に次のような場面で活躍します。

  • ステージングエリアに追加した変更を取り消したいとき
  • 直前や特定のコミットをなかったことにしたいとき
  • 作業ディレクトリを含めて完全にリセットしたいとき

git resetの基本的な仕組み

git reset は、指定したコミットを新しい現在地(HEAD)に設定し、それ以降のコミットをなかったことにする仕組みを持っています。「履歴の基準点を移動させる」ことで、過去のある時点からやり直せるのが特徴です。

たとえば、コミット履歴が A → B → C の順になっている場合、コミットCを git reset で取り消すと、Cは削除されて HEAD はBを指す状態になります。

なお、このとき取り消した変更を残すかどうかは、次に紹介するオプションで決まります。

git resetの主なオプションと違い

git reset には、どこまで変更を取り消すかによって使い分ける3つの主要なオプションがあります。

オプション説明
--softコミットだけを取り消し、変更内容はステージに残す
--mixed(デフォルト)コミットとステージを取り消し、変更は作業ツリーに残す
--hardコミット・ステージ・作業内容をすべて削除してリセット

git resetオプションのメリット・デメリット

git reset は、操作内容によっては変更を失うリスクもあるため、それぞれのオプションの特性を理解した上で使い分けることが重要です。以下の表で、主な3オプションの利点と注意点を比較してみましょう。

オプションメリットデメリット
--soft編集を保ったままコミットのやり直しができる履歴操作に慣れていないと混乱しやすい
--mixedステージだけをクリアしたい場合に便利挙動が曖昧になりやすいため明示的に使うのがベター
--hard作業状態を完全に初期化できる一度使うと復元ができないため要注意

▼「git reset」の詳しい手順や活用方法はこちらで解説しています

【初心者向け】git resetでコミットを取り消す方法|3つのモードの違いと基本の使い方をわかりやすく解説

https://envader.plus/article/544

git revertとgit resetの違い

git revertgit reset は、どちらもGitでコミットを取り消すコマンドですが、違うのは履歴をどう扱うかです。

  • git revert:履歴を残したままの取り消し
  • git reset:履歴を書き換えによる取り消し

2つのコマンドについて学んできましたが、もう一度ここで違いを整理してみましょう。

コミット履歴の取り消しの違い

以下の図は、git revertgit reset の違いを表しています。

  • git revert

    コミットCを取り消すと、Cの変更を打ち消す新しいコミットDが作成されます。履歴が残るため、push後の共有ブランチでも安全に利用できます。

  • git reset

    コミットCを取り消すと、Cそのものが履歴から削除されます。履歴を書き換えるため、push前のローカル作業に適しています。

このように、git revertgit reset はコミットの取り消し方が異なります。どちらを使うべきか迷ったらそのコミットがリモートにpushされているかどうかで判断するのが基本です。


次のセクションでは、具体的なシーンごとに「どのコマンドをどう使えばよいか」を整理していきます。push前後だけでは判断が難しい場面でも、シーン別に見ることで迷わず選べるようになります。

シーン別でわかる!コミットの取り消し方法

コミットを取り消す場面はさまざまです。push前かpush後かという基準に加えて、状況に応じて適切なコマンドを選ぶことが大切です。ここではよくあるシーンを例に、git revertgit reset の使い分けを整理します。

間違ったコミットをしてしまった場合

pushしていなければgit reset、push済みならgit revertで安全に対処します。

  1. リモートにまだプッシュしていない場合

    ローカルだけでの操作なら、git resetで簡単に直前のコミットを取り消せます。

    git reset HEAD~1
  2. リモートにすでにプッシュしている場合

    push後のコミット取り消しは、履歴を壊さないgit revertを使うのが安全です。新しいコミットを生成し、間違ったコミットを取り消します。

    git revert [コミットのハッシュ]

過去のコミットに戻りたい場合

確認だけなら git checkout、履歴を操作するなら git resetを使います。

  1. 一時的に過去の状態を確認したい場合

    履歴を変更せず過去の状態を確認のみしたい場合は、以下のようにチェックアウトします。

    git checkout [コミットのハッシュ]
  2. 完全に過去のコミットに戻したい場合

    戻したいコミット以降の履歴をすべて消したい場合は、--hard オプションを使います。ワークツリー(作業中のファイル)やインデックス(ステージされた内容)も指定したコミットの状態に戻されるため注意が必要です。

    git reset --hard [コミットのハッシュ]
  3. コミットだけを取り消して編集内容を残したい場合

    変更内容は残したまま、コミット履歴だけを巻き戻したいときは、--soft オプションを使います。たとえば複数のコミットを1つにまとめ直したいときなどに便利です。

    git reset --soft [コミットのハッシュ]

公開リポジトリで誤操作をしてしまった場合

チームやCIが関係するリポジトリでは、履歴を壊さない git revert を使いましょう。

  1. 誤ったコミットをpushしてしまった場合

    公開リポジトリでは git reset は使わず、git revert で取り消しコミットを作成します。

    git revert [コミットのハッシュ]
  2. 複数のコミットを一気に取り消したい場合

    連続する複数のコミットをまとめて打ち消すことも可能です。

    git revert [古いコミットのハッシュ]..[新しいコミットのハッシュ]

これらの方法を理解しておけば、Gitでの作業中に発生するさまざまな問題を、状況に応じて安全かつ柔軟に解決することができます。

この記事で学んだこと

この記事では、Gitでコミットを取り消す方法について、基本から具体的な使い分けまで段階的に学んできました。

まず、「コミットを取り消したい」と思ったときに確認すべきなのは、そのコミットがpush済みかどうかという点でした。

  • push前であれば、履歴を自由に修正できるgit resetが有効
  • push後であれば、履歴を壊さず安全に取り消せるgit revertを使うのが基本方針です

さらに、以下のようなポイントを整理しました。

  • 両コマンドにおける各オプションの特徴と、メリット・デメリットの比較
  • 実務でのシーン別の選び方と安全な使い分けの判断軸

Gitは履歴管理が強力な反面、誤った操作で取り返しのつかない変更をしてしまうこともあります。今回紹介した基本的なコマンドと考え方を理解しておくことで、安全かつ意図通りに履歴を管理する力が身につきます。ぜひGitマスターへの道へ進んでいってください。

Git操作に自信をつけたい方へ:おすすめの学習方法

「Gitの操作、まだちょっと不安かも…」そんな方におすすめなのが、「エンベーダー」です。 Gitの基本コマンドをはじめ、エンジニアに欠かせないLinuxの知識や操作をブラウザ上で気軽に学べる学習サービスです。

環境構築は不要。わずか5秒で学習環境が起動し、実際にコマンドを入力しながら学べるので、ゲーム感覚で楽しくスキルを習得できます

エンベーダー公式サイト - Gitの使い方コース

https://envader.plus/course/5/scenario/1055

ポイント1:コマンド入力はすべてブラウザ上で完結。実際に手を動かして学べます。

ポイント2:入力したコマンドの正誤や解説を、すぐに確認できます。

ポイント3:Gitだけでなく、Linuxやシェル操作など、今後のキャリアに活かせる学習コースも豊富に用意されています。

エンベーダーの学習コース一覧

https://envader.plus/course

いくつかのコースは無料で体験できるため、「コマンドに慣れたい」「楽しくGitを身につけたい」という方は、ぜひ一度エンベーダーを試してみてください。

参考文献の紹介

Gitの学習は基本的なコマンドの理解から始まりますが、深く探求することでさらなる知識やスキルを獲得できます。以下はGitに関する学習のためのおすすめのリソースや参考文献です。

【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話

IT未経験者必見 USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話

プログラミング塾に半年通えば、一人前になれると思っているあなた。それ、勘違いですよ。「なぜ間違いなの?」「正しい勉強法とは何なの?」ITを学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。

「フリーランスエンジニア」

近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。

「成功する人とそうでない人の違いは何か?」

私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。

比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。

多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、

note記事3000いいね超えの殿堂記事 LINE登録で記事を見る

エンベーダー編集部

エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。

RareTECH 無料体験授業開催中! オンラインにて実施中! Top10%のエンジニアになる秘訣を伝授します! RareTECH講師への質疑応答可

関連記事