はじめに
Gitでの開発中に「間違ったコミットをしてしまった」「過去の状態に戻したい」という場面に遭遇することはありませんか?そんなときに頼りになるのが、git revert
とgit reset
です。
この2つのコマンドはどちらも「コミットを取り消す」ために使われますが、実際には動作がまったく異なります。使い方を誤ると、コミットが完全に消えてしまったり、自分の履歴だけが書き換わってチームメンバーと食い違ったりすることがあります。その結果、pushができなかったり、pullでエラーが出て、チーム全体の開発が止まってしまうこともあります。
本記事では、この2つのコマンドの基本から実践的な使い分けまで、初心者の方にも分かりやすく解説していきます。
Gitについての基本
GitとGitHubの基本を知りたい方は、以下の記事がおすすめです。
▼Gitを基礎から学びたい方はこちら
【初心者向け】GitHubとは?必須知識と使い方について解説!
https://envader.plus/article/68
▼Gitコマンド早見表はこちら
必見!現場で役立つGitコマンド29選をまとめて紹介!
https://envader.plus/article/402
コミットの取り消し:どちらのコマンドを使う?
git revert
と git 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 revert
と git reset
は、どちらもGitでコミットを取り消すコマンドですが、違うのは履歴をどう扱うかです。
- git revert:履歴を残したままの取り消し
- git reset:履歴を書き換えによる取り消し
2つのコマンドについて学んできましたが、もう一度ここで違いを整理してみましょう。
コミット履歴の取り消しの違い
以下の図は、git revert
と git reset
の違いを表しています。
-
git revert
コミットCを取り消すと、Cの変更を打ち消す新しいコミットDが作成されます。履歴が残るため、push後の共有ブランチでも安全に利用できます。
-
git reset
コミットCを取り消すと、Cそのものが履歴から削除されます。履歴を書き換えるため、push前のローカル作業に適しています。
このように、git revert
と git reset
はコミットの取り消し方が異なります。どちらを使うべきか迷ったら「そのコミットがリモートにpushされているかどうか」で判断するのが基本です。
次のセクションでは、具体的なシーンごとに「どのコマンドをどう使えばよいか」を整理していきます。push前後だけでは判断が難しい場面でも、シーン別に見ることで迷わず選べるようになります。
シーン別でわかる!コミットの取り消し方法
コミットを取り消す場面はさまざまです。push前かpush後かという基準に加えて、状況に応じて適切なコマンドを選ぶことが大切です。ここではよくあるシーンを例に、git revert
と git reset
の使い分けを整理します。
間違ったコミットをしてしまった場合
pushしていなければgit reset
、push済みならgit revert
で安全に対処します。
-
リモートにまだプッシュしていない場合
ローカルだけでの操作なら、
git reset
で簡単に直前のコミットを取り消せます。git reset HEAD~1
-
リモートにすでにプッシュしている場合
push後のコミット取り消しは、履歴を壊さない
git revert
を使うのが安全です。新しいコミットを生成し、間違ったコミットを取り消します。git revert [コミットのハッシュ]
過去のコミットに戻りたい場合
確認だけなら git checkout
、履歴を操作するなら git reset
を使います。
-
一時的に過去の状態を確認したい場合
履歴を変更せず過去の状態を確認のみしたい場合は、以下のようにチェックアウトします。
git checkout [コミットのハッシュ]
-
完全に過去のコミットに戻したい場合
戻したいコミット以降の履歴をすべて消したい場合は、
--hard
オプションを使います。ワークツリー(作業中のファイル)やインデックス(ステージされた内容)も指定したコミットの状態に戻されるため注意が必要です。git reset --hard [コミットのハッシュ]
-
コミットだけを取り消して編集内容を残したい場合
変更内容は残したまま、コミット履歴だけを巻き戻したいときは、
--soft
オプションを使います。たとえば複数のコミットを1つにまとめ直したいときなどに便利です。git reset --soft [コミットのハッシュ]
公開リポジトリで誤操作をしてしまった場合
チームやCIが関係するリポジトリでは、履歴を壊さない git revert
を使いましょう。
-
誤ったコミットをpushしてしまった場合
公開リポジトリでは
git reset
は使わず、git revert
で取り消しコミットを作成します。git revert [コミットのハッシュ]
-
複数のコミットを一気に取り消したい場合
連続する複数のコミットをまとめて打ち消すことも可能です。
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やシェル操作など、今後のキャリアに活かせる学習コースも豊富に用意されています。
エンベーダーの学習コース一覧
いくつかのコースは無料で体験できるため、「コマンドに慣れたい」「楽しくGitを身につけたい」という方は、ぜひ一度エンベーダーを試してみてください。
参考文献の紹介
Gitの学習は基本的なコマンドの理解から始まりますが、深く探求することでさらなる知識やスキルを獲得できます。以下はGitに関する学習のためのおすすめのリソースや参考文献です。
-
Git公式ドキュメント:git-revert
-
Git公式ドキュメント:git-reset
-
サル先生のGit入門 - タスク管理ツールBacklogによるGitの日本語解説です。
【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話

プログラミング塾に半年通えば、一人前になれると思っているあなた。それ、勘違いですよ。「なぜ間違いなの?」「正しい勉強法とは何なの?」ITを学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。
「フリーランスエンジニア」
近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。
「成功する人とそうでない人の違いは何か?」
私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。
比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。
多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、
エンベーダー編集部
エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。

関連記事

2025.09.18
Web開発のトレンド SPA・SSR・SSGをわかりやすく解説
現代のWeb開発ではパフォーマンス・ユーザーエクスペリエンス・SEOなど多岐にわたる要因を考慮する必要があり、SPA・SSR・SSGはそれらの要因を最適化するための鍵となる技術となっています。
- プログラミング

2025.06.26
【Git】git cherry-pickとは?便利な使い方と注意点を解説
別ブランチのコミットを一つだけ取り込み、バグ修正などに活用。git cherry-pickの基本からオプション、コンフリクト発生時の注意点までを解説します。
- git

2024.05.16
「git check-ignore」コマンドとは?「.gitignore」ファイルも併せて解説
この記事では「git check-ignore」コマンドについて解説します。
- git

2022.12.14
継続的インテグレーション・継続的デリバリー(CI/CD)とは
CI/CDは1つの技術を指すものでなく、ソフトウェアの変更を常にテストして自動で本番環境にリリース可能な状態にしておくソフトウェア開発の手法を意味します。
- プログラミング