コミットの取り消しgit resetとgit revertどちらを使う?
まだ git push
していないローカルコミットを取り消すには git reset
、すでにリモート(GitHub など)に push 済みのコミットを取り消したい場合には git revert
が安全です。
以下の判断フローを使えば、状況に応じた最適な取り消し方法がすぐにわかります。
どちらのコマンドを使うか、方向性が見えてきたでしょうか?
次のセクションでは、ご自身の状況と照らし合わせながら、具体的なシーンごとに「どのコマンドをどう使えばよいか」をさらに詳しく整理していきます。push前後だけでは判断が難しい場面でも、シーン別に見ることで迷わず選べるようになります。
シーン別でわかる!Gitのコミット取り消し方法
Gitのコミットを取り消すときは、まず「どんな状況か」を確認することが重要です。
前のセクションでお伝えした通り、「push前に間違えたのか」「push後に修正が必要なのか」といった状況によって、使用を推奨するコマンドは異なります。このセクションでは、開発現場でよくあるシーンごとに最適なコマンドと使い方を解説します。
間違ったコミットをしてしまった場合
pushしていなければgit reset
、push済みならgit revert
で安全に対処します。
-
リモートにまだプッシュしていない場合
ローカルだけでの操作なら、
git reset
で簡単に直前のコミットを取り消せます。git reset HEAD~1
-
リモートにすでにプッシュしている場合
push後のコミット取り消しは、履歴を壊さない
git revert
を使うのが安全です。新しいコミットを生成し、間違ったコミットを取り消します。git revert [コミットのハッシュ]
過去のコミットに戻りたい場合
確認だけなら git checkout
、履歴を操作するなら git reset
を使います。
-
一時的に過去の状態を確認したい場合
履歴を変更せず過去の状態を確認のみしたい場合は、以下のようにチェックアウトします。
git checkout [コミットのハッシュ]
-
完全に過去のコミットに戻したい場合
戻したいコミット以降の履歴をすべて消したい場合は、
git reset --hard
を使います。ワークツリー(作業中のファイル)やインデックス(ステージされた内容)も指定したコミットの状態に戻されるため注意が必要です。git reset --hard [コミットのハッシュ]
-
コミットだけを取り消して編集内容を残したい場合
変更内容は残したまま、コミット履歴だけを巻き戻したいときは、
git reset --soft
を使います。たとえば複数のコミットを1つにまとめ直したいときなどに便利です。git reset --soft [コミットのハッシュ]
公開リポジトリで誤操作をしてしまった場合
チームやCIが関係するリポジトリでは、履歴を壊さない git revert
を使いましょう。
-
誤ったコミットをpushしてしまった場合
公開リポジトリでは
git reset
は使わず、git revert
で取り消しコミットを作成します。git revert [コミットのハッシュ]
-
複数のコミットを一気に取り消したい場合
連続する複数のコミットをまとめて打ち消すことも可能です。
git revert [古いコミットのハッシュ]..[新しいコミットのハッシュ]
これらの方法を理解しておけば、Gitでの作業中に発生するさまざまな問題を、状況に応じて安全かつ柔軟に解決することができます。
ただし、なぜ git reset
と git revert
で使い方がこんなにも異なるのか、根本的な仕組みや違いも押さえておくと、より安心して使い分けができるようになります。
次のセクションでは、それぞれのコマンドの動作の違いや使い分けの判断ポイントについて、仕組みの面から詳しく見ていきましょう。
git resetとgit revertの違いとは
git reset
と git revert
は、どちらもGitでコミットを取り消すためのコマンドですが、「どう取り消すか」の方法が大きく異なります。
git reset
は「履歴そのものを書き換える」取り消し、git revert
は「変更を打ち消す新しいコミットを追加する」取り消し方です。
git reset:コミットの履歴を書き換えて取り消す方法
git reset
は、ブランチの先端(HEAD)を過去のコミットに戻し、それ以降の履歴をなかったことにする操作です。
このため、間違えたコミットや不要な変更を履歴から完全に消したい場合に適しています。主にローカル作業中(push前)に使います。たとえば、誤って余計なファイルをコミットしてしまった場合、git reset
を使えばそのコミットをなかったことにし、ステージや作業ディレクトリに戻してやり直すことができます。ただし、履歴そのものを変更してしまうため、すでにpushした後のブランチでは使わない方が安全です。
git revert:コミットの履歴を保ったまま取り消す方法
git revert
は、特定のコミットを「打ち消す」ための新しいコミットを追加する方法です。
履歴はそのまま残るため、どのような変更が加えられ、どのように取り消されたのかを記録として明確に残せます。この方法は、すでにリモートにpushされたコミットや、他の開発者と共有しているブランチでの取り消しに最適です。たとえば、本番ブランチに不要な変更を誤って取り込んでしまった場合でも、git revert
を使えば安全に取り消しができます。
コミットの取り消しのまとめ
-
リモートにプッシュしたコミットはgit resetで取り消さない
他の開発者との履歴の不整合を避けることができます。リモートのコミットを取り消す場合は、
git revert
を使用してください。 -
変更の取り消しは早めに行う
長い時間が経過してから変更を取り消すと、コンフリクトが発生する可能性が高まります。
-
コマンドの使用前には必ず現在のブランチやステータスを確認する
誤ったブランチやコミットで操作を行わないように注意してください。
このように、2つのコマンドはコミットの取り消し方が異なります。どちらを使うべきか迷ったら、「そのコミットがリモートにpushされているかどうか」を基準に判断するのがポイントです。次のセクションでは、それぞれのコマンドの基本的な役割と、よく使われる代表的なオプションを簡単に紹介します。
git resetとは
git reset
は、ローカル履歴を巻き戻して整理するためのGitコマンドです。
前のセクションで触れたとおり、push前のコミットを取り消したいときに使います。ここでは、git reset
の主な用途や具体的なオプションを通して、実際の使い方を詳しく見ていきましょう。
git resetコマンドの主な用途
git reset
は、以下のような目的で使用されます。
- ステージングエリア(index)からの取り消し
- コミット履歴の巻き戻し
- 作業ディレクトリを含めた完全なリセット
これらの操作により、「なかったことにする」やり直しが柔軟に行えるのが git reset
の特徴です。
git resetの主なオプションと違い
git reset
には、どこまで変更を巻き戻すかによって使い分ける3つの主要なオプションがあります。
オプション | 説明 |
---|---|
--soft | コミットだけを取り消し、変更内容はステージに残す |
--mixed (デフォルト) | コミットとステージを取り消し、変更は作業ツリーに残す |
--hard | コミット・ステージ・作業内容をすべて削除してリセット |
git resetオプションのメリット・デメリット
git reset
は非常に便利な反面、操作内容によっては変更を失うリスクもあるため、それぞれのオプションの特性を理解した上で使い分けることが重要です。以下の表で、主な3オプションの利点と注意点を比較してみましょう。
オプション | メリット | デメリット |
---|---|---|
--soft | 編集を保ったままコミットのやり直しができる | 履歴操作に慣れていないと混乱しやすい |
--mixed | ステージだけをクリアしたい場合に便利 | 挙動が曖昧になりやすいため明示的に使うのがベター |
--hard | 作業状態を完全に初期化できる | 一度使うと復元ができないため要注意 |
次のセクションでは、git revert
の基本と使い方について簡単に見ていきましょう。
git revertとは
git revert
は、変更を取り消すための「打ち消しコミット」を新たに作成するGitコマンドです。
こちらも前のセクションで紹介したとおり、push済みのコミットを安全に取り消したい場面で活躍します。ここでは、git revert
の具体的な使い方や、オプションの効果を掘り下げて解説します。
git revertコマンドの主な用途
git revert
は、以下の目的で使われます。
- 指定したコミット内容を反対方向に適用して取り消す
- 履歴を残しながら修正やミスの対応を行う
- チーム開発やCI/CDでの安全な修正手段として活用
git revertのオプション
git revert
には、用途に応じて動作を調整できるいくつかのオプションがあります。ここでは、よく使われる代表的なオプションを3つ紹介します。
オプション | 説明 |
---|---|
--no-edit | 自動生成されたメッセージをそのまま使用し、エディタを省略 |
-m / --mainline | マージコミットをrevertする際の親ブランチの指定 |
-n / --no-commit | ステージだけして、まとめてコミットできるようにする |
git revertオプションのメリット・デメリット
git revert
は履歴を壊さない安全性の高いコマンドですが、使い方によっては少し手間がかかる場面もあります。以下に主なオプションの特性をまとめました。
オプション | メリット | デメリット |
---|---|---|
--no-edit | 操作がシンプルで作業が早い | メッセージの編集ができない |
-m / --mainline | マージのrevertに対応できる | 親の指定ミスに注意が必要 |
-n / --no-commit | 複数のrevertをまとめて整理できる | コミットし忘れると変更が残る恐れがある |
git revert
は、履歴を壊さずに誤りを修正できるという点でとても信頼性の高い方法です。特に本番運用やチーム開発では、「取り消したことを明示的に記録できる」点が大きなメリットとなります。
さらに「複数のコミットをひとつにまとめて履歴をすっきり整理したい」という場合には、revert
ではなくsquash
という方法が使われます。どちらも履歴を整えるための手段ですが、目的や使いどころが異なるため、両方を知っておくとより柔軟なバージョン管理が可能になります。
コミットをまとめ直す「squash」の具体的な方法については、以下の記事で詳しく解説しています。
gitのコミット履歴を整理するためにsquashを使いこなそう
https://envader.plus/article/268
適切な理解で安全に使い分けを
このように、「reset = 履歴の書き換え」「revert = 履歴を残したまま修正」と使い分けを意識しながら、それぞれのコマンドを活用できるようになると、Git操作に自信がつきます。もし、Git操作が不慣れと感じている方には、次に紹介する学習方法がおすすめです。
Git操作に自信をつけたい方へ:おすすめの学習方法
「Gitの操作、まだちょっと不安かも…」そんな方におすすめなのが、「エンベーダー」です。 Gitの基本コマンドをはじめ、エンジニアに欠かせないLinuxの知識や操作をブラウザ上で気軽に学べる学習サービスです。
環境構築は不要。わずか5秒で学習環境が起動し、実際にコマンドを入力しながら学べるので、ゲーム感覚で楽しくスキルを習得できます。
エンベーダー公式サイト - Gitの使い方コース
https://envader.plus/course/5/scenario/1055
ポイント1:コマンド入力はすべてブラウザ上で完結。実際に手を動かして学べます。
ポイント2:入力したコマンドの正誤や解説を、すぐに確認できます。
ポイント3:Gitだけでなく、Linuxやシェル操作など、今後のキャリアに活かせる学習コースも豊富に用意されています。
エンベーダーの学習コース一覧
いくつかのコースは無料で体験できるため、「コマンドに慣れたい」「楽しくGitを身につけたい」という方は、ぜひ一度エンベーダーを試してみてください。
この記事で学んだこと
この記事では、Gitでコミットを取り消す方法について、基本から具体的な使い分けまで段階的に学んできました。
まず、「コミットを取り消したい」と思ったときに確認すべきなのは、そのコミットがpush済みかどうかという点でした。
- push前であれば、履歴を自由に修正できる
git reset
が有効 - push後であれば、履歴を壊さず安全に取り消せる
git revert
を使うのが基本方針です
さらに、以下のようなポイントを整理しました。
- 両コマンドにおける各オプションの特徴と、メリット・デメリットの比較
- 実務でのシーン別の選び方と安全な使い分けの判断軸
Gitは履歴管理が強力な反面、誤った操作で取り返しのつかない変更をしてしまうこともあります。今回紹介した基本的なコマンドと考え方を理解しておくことで、安全かつ意図通りに履歴を管理する力が身につきます。ぜひGitマスターへの道へ進んでいってください。
参考文献の紹介
Gitの学習は基本的なコマンドの理解から始まりますが、深く探求することでさらなる知識やスキルを獲得できます。以下はGitに関する学習のためのおすすめのリソースや参考文献です。
-
Gitの公式ドキュメントで、初心者から上級者までの内容が詳しく解説されています。
-
タスク管理ツールBacklogによるGitの日本語解説です。
-
実践的なハンズオン形式でGitやGitHubの操作を学ぶことができるリソースです。
-
Gitの内部構造や高度な操作に関する詳細なガイドブックです。
【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話

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

関連記事

2023.12.27
エンジニアとしてガバメントクラウドを扱うことになったら
ガバメントクラウドは、クラウドコンピューティング技術を政府機関の業務に適用したシステムです。このシステムは、データの保存・アクセス・管理を改善し、政府の効率性と柔軟性を高めることを目的としています。日本においてガバメントクラウドの導入は、政府業務のデジタル変革と公共サービスの向上に不可欠な役割を果たしています。
- インフラエンジニア

2025.03.18
どちらを選ぶ?クラウドとオンプレミスのメリット・デメリット、違いを比較
クラウドとオンプレミス、それぞれどのようなケースで利用するのかについて解説します。
- インフラエンジニア

2024.08.29
プログラミングの基本概念をたとえで理解する
本記事では、プログラミングの基本概念を具体的な日常生活の事象にたとえて説明していきます。これにより、抽象的な概念を視覚的に捉えやすくし、初学者がより理解しやすくなることを目指します。
- プログラミング
- キャリア・学習法

2022.11.26
【徹底解説】Pythonのコーディング規約とは?PEP8について解説
こちらの記事では、Pythonのコーディング規約について解説します。
- プログラミング