1. ホーム
  2. 記事一覧
  3. 【初心者向け】git revertでコミットを取り消す方法|安全な取り消しと基本の使い方をわかりやすく解説

2025.06.12

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

はじめに

Gitで「間違ったコミットを取り消したい」と思ったとき、どのコマンドを使えばいいのか迷うことはありませんか?本記事では、コミットの履歴を壊さず、安全に変更を取り消せる git revert ****の使い方について、初心者の方にもわかりやすく丁寧に解説します。

この記事を読むことで、git revert の基本から実践的なハンズオン、さらに実務で役立つ応用テクニックまでを段階的に学ぶことができます。git revert を使いこなせるようになると、誤操作への対応や履歴の整理にも安心して対応できるようになります。ぜひ一緒に学んでいきましょう。

git revertとは

git revert とは、指定したコミットの変更を取り消すための新しいコミットを作成するGitコマンドです。

この操作を使えば、コミットの履歴を壊すことなく安全に変更を取り消すことができます。そのため、git revert によるコミットの取り消しは、共有リポジトリやチーム開発において特に有効な方法です。

では、このコマンドがどのように「コミットを取り消す」のか、もう少し具体的に見ていきましょう。

git revertのコミットの取り消しとは

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

たとえば、あるコミットで hello.txt に「Good Night」という行を追加していたとします。このコミットに対して git revert を実行すると、「Good Night の行を削除する」新しいコミットが作成されます。

ここで大切なのは、元のコミットは履歴に残り続けるという点です。git revert はあくまでも「履歴を壊さずに変更を取り消す仕組みであり、履歴の整合性を保ったまま安全に操作できるのが大きな利点です。

git revertが活躍する場面

以下のような場面で git revert は非常に効果的です。

  • リモートにプッシュ済みのコミットを取り消したいとき
  • 共有ブランチで誤ってマージ・変更したとき
  • 本番環境に反映済みの変更を安全に巻き戻したいとき

このように git revert は、チーム開発や本番環境での安全な変更取り消し手段として覚えておくと便利です

コミットの取消し:git revertとgit resetの違い

git revertgit reset は、どちらもコミットを取り消すためのコマンドですが、仕組みと使い方が大きく異なります。

もう一つの取り消しコマンドである git reset は、指定したコミット以降の履歴を削除して過去の状態に巻き戻す操作です。履歴を書き換えるため、ローカルでの作業に限定して使うのが基本です。

どちらを使うべきか迷ったときの判断基準については、以下の記事で詳しく解説しています。

git revertとgit resetのやり方とは?初心者でも迷わず選べるコミット取り消しの基本

https://envader.plus/article/244

git revertの使い方

git revertの基本的な使い方は、取り消したいコミットのハッシュや HEAD を指定します。

基本のコマンドは以下の通りです。

git revert <対象のコミット>

この操作は、以下の3つのステップで進めるとスムーズです。

  1. コミット履歴を確認して対象を特定
  2. git revert コマンドを実行
  3. 結果を確認して動作を検証

それぞれの手順を詳しく見ていきましょう。

1. コミット履歴の確認方法(git log --oneline)

まずは、どのコミットを打ち消すかを判断するために、コミット履歴を確認します。

git log --oneline

実行結果の例

a1b2c3d (HEAD -> main) コミットC:Good Night を追加
8h9i0j1 コミットB:Good Morning を追加
2k3l4m5 コミットA:Hello World を追加

左側の英数字(コミットハッシュ)が、git revert の対象として使える識別子です。

2-1. git revert コマンドを実行:直前のコミットをrevertする方法

直前のコミットを取り消したい場合は、HEAD を指定して次のように実行します。

git revert HEAD

このコマンドを実行すると、エディタが起動し、新しく作られるrevertコミットのメッセージ編集画面が表示されます(以下はvimの例)

Revert "Good Night を追加"

This reverts commit a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0.

メッセージの変更があれば修正し、無ければそのまま保存(:wq)して問題ありません。

2-2. git revert コマンドを実行:特定のコミットをrevertする方法

過去の任意のコミットを打ち消すには、対象のコミットハッシュを直接指定します。たとえば、8h9i0j1 のコミットをrevertしたい場合は、次のようにします。

git revert 8h9i0j1

このようにして、履歴を壊さずに過去の特定の変更だけを取り消すことができます。

ここまで、git revert の基本的な使い方を学習しました。次のセクションでは、さらに効率的にrevertを活用するためのオプションについて詳しく解説します。

3. 結果を確認して動作を検証

git revert の実行後は、変更内容が正しく反映されたかを確認します。手順1で紹介したコミット履歴の確認コマンドをもう一度実行してみましょう。

git log --oneline

# 出力例
b2c3d4e (HEAD -> main) Revert "Good Night を追加"
a1b2c3d Good Night を追加
8h9i0j1 Good Morning を追加

Revert "..." というメッセージの新しいコミットが追加されていれば、revertの操作は正常に完了しています。

基本的な操作に慣れたら、より柔軟に使いこなすために git revert のオプションも活用してみましょう。次のセクションでは、代表的なオプションの使い方を紹介します。

git revertのオプションの紹介

git revert をより柔軟に使いこなすためには、状況に応じたオプションの活用が欠かせません。標準の使い方に加えて、オプションを適切に組み合わせることで、作業効率や操作の確実性が大きく向上します。

以下は、よく使われるオプションの一覧です。

オプション用途
--no-editエディタを開かずに自動コミット
--no-commit / -nコミットせずにステージングのみ
--edit明示的にメッセージを編集
-m / --mainlineマージコミットの親指定
--strategyコンフリクト時の自動解決方法の指定
--strategy-option自動解決の詳細設定
--signoff署名付きコミット

それぞれの使い方を順番に見ていきましょう。

--no-edit

コミットメッセージの編集画面を開かずに、デフォルトメッセージで自動的にコミットします。コミットメッセージの変更がない場合に便利なオプションです。

git revert --no-edit HEAD

--no-commit

revertの変更をステージングエリアに追加するだけで、自動的にコミットしません。複数のrevertをまとめてコミットしたい場合に便利です。

git revert --no-commit HEAD
git revert --no-commit HEAD~1
git commit -m "複数の変更をまとめてrevert"

--edit

デフォルトでもエディタが開きますが、明示的にコミットメッセージの編集を指定したい場合に使用します。

git revert --edit HEAD

-m / --mainline <parent-number>

マージコミットをrevertする際に、どの親コミットに戻すかを指定します。

# 1番目の親(通常はmainブランチ)に戻す
git revert -m 1 <マージコミットのハッシュ>

# 2番目の親(マージされたブランチ)に戻す  
git revert -m 2 <マージコミットのハッシュ>

--strategy=<strategy>

コンフリクト(競合)が発生した際に、どちらの変更を優先するかを自動で決める方法を指定します。このオプションを使うと、一部の状況では手動でのコンフリクト解決を避けることができます。

# 現在のブランチの内容を優先(revert対象の変更を無視)
git revert --strategy=ours HEAD

# revert対象のコミットの内容を優先
git revert --strategy=theirs HEAD

通常の git revert 操作では競合が発生するケースは少なく、特定の条件下でのみ使うことが多いオプションです。初心者の方は「revert中に競合が起きた場合に使うもの」と理解しておけば問題ありません。

--strategy-option=<option>

--strategyオプションをさらに細かく調整するための追加設定です。自動解決の動作をカスタマイズしたい場合に使用します。

# 空白の違いを無視してrevert(スペースとタブの違いなど)
git revert --strategy-option=ignore-space-change HEAD

# 行末の空白を無視してrevert
git revert --strategy-option=ignore-space-at-eol HEAD

# 全ての空白の違いを無視してrevert
git revert --strategy-option=ignore-all-space HEAD

このオプションも特定のケースでのみ利用されることが多く、基本的な操作に慣れてから試すことをおすすめします。

--signoff

コミットメッセージに署名行を追加します。

git revert --signoff HEAD

コミットメッセージに以下が追加されます。

Signed-off-by: Your Name <your.email@example.com>

複数オプションの組み合わせ

オプションは組み合わせて使用できます。

# エディタを開かずに署名付きでrevert
git revert --no-edit --signoff HEAD

# コミットせずに特定の自動解決方法でrevert
git revert --no-commit --strategy=ours HEAD

git revert のオプションを使い分けることで、様々な状況に柔軟に対応できます。最初は基本的な--no-edit--no-commitから始めて、徐々に他のオプションも活用してみてください。

git revertの使い方ハンズオン

実際に git revert を使って、コミットの打ち消し処理を体験しながら理解を深めていきましょう。今回は、直前のコミットを revert するシンプルなケースをもとに進めていきます。

1. テスト用のリポジトリを作成

まずはテスト用のローカルリポジトリを作成します。

# 新しいディレクトリを作成
mkdir git-revert-test
cd git-revert-test

# Gitリポジトリを初期化
git init

# hello.txtファイルを作成・Hello Worldを追加してコミット
echo "Hello World" > hello.txt
git add hello.txt
git commit -m "Hello World を追加"

# 2つ目の変更をコミット
echo "Good Morning" >> hello.txt
git add hello.txt
git commit -m "Good Morningを追加"

# 3つ目の変更をコミット
echo "Good Night" >> hello.txt  
git add hello.txt
git commit -m "Good Nightを追加"

2. 現在の状態を確認

次に、ファイルの中身とコミット履歴を確認して、revert前の状態を把握しておきましょう。

# ファイルの内容を確認
cat hello.txt

# コミット履歴を確認
git log --oneline

出力結果の例:

# ファイルの内容を確認
cat hello.txt
Hello World
Good Morning
Good Night
# コミット履歴を確認
git log --oneline
f5c3152 (HEAD -> main) Good Nightを追加
03d6ec4 Good Morningを追加
4ce3be9 (origin/main, origin/HEAD) Initial commit

3. 直前のコミットをrevert

ここでは直前のコミット(Good Night を追加)を --no-edit オプションを使って取り消します。これにより、エディタを開かずに自動でコミットされます。

git revert HEAD --no-edit

実行結果の例:

git revert HEAD --no-edit
[main 429faf3] Revert "Good Nightを追加"
 Date: Tue Jun XX XX:XX:XX XXXX +0900
 1 file changed, 1 deletion(-)

4. 結果を確認

revertが正しく適用されたかを確認します。

# コミット履歴を確認
git log --oneline

# ファイルの内容を確認
cat hello.txt

出力例:

# コミット履歴を確認
git log --oneline
429faf3 (HEAD -> main) Revert "Good Nightを追加"
f5c3152 Good Nightを追加
03d6ec4 Good Morningを追加
4ce3be9 (origin/main, origin/HEAD) Initial commit
# ファイルの内容を確認
cat hello.txt 
Hello World
Good Morning

git revert によって 新しいコミットが追加され、「Good Night」の行が削除されたことがわかります。元の Good Night を追加 のコミットはそのまま履歴に残っており、変更だけが打ち消された形です。

git revertの使い方ハンズオンのまとめ

このハンズオンを通して、git revert を使えば履歴を保ったまま変更を安全に打ち消せることが確認できました。

revert操作では、元のコミット(例:f5c3152)はそのまま残り、打ち消し用のコミット(例:429faf3)が新たに追加されるという仕組みです。

次のセクションでは、git revert を実務でより活用するために知っておきたい応用的な使い方を紹介します。マージコミットの取り消しや、revert自体をやり直す方法など、実際の開発現場で役立つ操作を学んでいきましょう。

git revertの応用的な使い方:実務で役立つ2つの操作例

git revert は、直前の変更を取り消すだけでなく、マージコミットの取り消しやrevert操作そのもののやり直しといった実務的な操作にも対応できます。

このセクションでは、開発現場で役立つ以下の2つの応用パターンを解説します。

  • マージコミットをgit revertする方法
  • git revert 取り消す方法

マージコミットをgit revertする方法

マージコミットを git revert する際には、通常のコミットとは異なり、どちらの親コミットを基準に変更を打ち消すかを指定する必要があります。

コミットの指定には、オプションセクションで紹介した -m オプションを使用します。

対処手順:

マージコミットには通常、親が2つあります。

  • 1番目の親(m 1):マージ先のブランチ(たとえば main
  • 2番目の親(m 2):マージ元のブランチ(たとえば feature

Gitはこのどちらを基準に「差分を逆にするか」を判断できないため、明示的に番号で指定する必要があります。

使い方の例:main に feature をマージしたコミットを打ち消す

たとえば、以下のようなコミット履歴があるとします。

この状態では、feature ブランチで「Good Night」を追加し、それを main ブランチにマージしたマージコミットDが存在しています。

このマージを取り消すには、以下のように -m オプションを使って git revert を実行します。

git revert -m 1 <マージコミットのハッシュ>

このとき、-m 1 は「main ブランチ(マージ先)を基準にして、feature 側の変更だけを打ち消す」ことを意味します。

補足:親の順番を確認する方法

どのコミットが「1番目の親」「2番目の親」かは、次のコマンドで確認できます。

git log -1 --pretty=raw <マージコミットのハッシュ>

出力結果に parent <ハッシュ> が2つ表示され、順番に -m 1-m 2 に対応しています。

git log -1 --pretty=raw
commit b9e3f0df4231710331dc3ba85ff1e6ff2e7c109a
tree 73d803857905d2522b7063ad503cb03f8c94bde6
parent 08c466e7ee8a4651c04e869206d0629a1f169a4b  ← 1番目の親
parent 158715c28023c83234db6ace7cd940bbdbff35372番目の親

このように、git revert でマージコミットを取り消す際は、変更のどちらを残してどちらを打ち消すかを明確にし、その意図に応じて -m オプションを使い分けることが大切です。

git revert を取り消す方法

誤って git revert を実行してしまった場合でも、以下のいずれかの方法で対応できます。

  • git reset によるコミットの取り消し

    revert直後であれば以下のコマンドを実行して、revertコミット自体を削除できます。

    git reset --hard HEAD^

    ※ただしこの操作はローカル限定で、安全に使えるのはまだリモートに push していない場合に限られます。

  • git revert の再実行による取り消し

    revertコミットに対してもう一度 git revert を実行することで、変更を打ち消す新しいコミットを追加し、元の状態に戻すことができます。

    git revert <revertコミットのハッシュ>

このように、git revert の応用的な使い方を理解しておくと、チーム開発や運用中のリポジトリでも安心して履歴操作を行えるようになります。場面に応じて適切な方法を選び、履歴を壊さずに安全なバージョン管理を行いましょう。

さまざまなGitコマンドを活用できるようになると、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 revert の基本的な使い方から、マージコミットの取り消しやrevertの取り消し方法といった実務で役立つ応用テクニックまでを解説しました。最後に大切なポイントを振り返ります。

  • git revertとは

    指定したコミットの変更内容を打ち消す「新しいコミット」を作成するコマンドです。

  • コミットの打ち消しと取り消しの違い

    git revert は履歴を残し、git reset は履歴ごと取り消します。2つのコマンドの違いは以下の記事で詳しく確認することができます。

    git revertとgit resetのやり方とは?初心者でも迷わず選べるコミット取り消しの基本

    https://envader.plus/article/244

  • git revertの使い方ハンズオン

    実際にrevert操作を体験し、どのように履歴に反映されるかを確認しました。

  • git revertの応用的な使い方

    マージコミットの取り消しや、revertの取り消し方法を習得しました。

git revert を使いこなせるようになると、誤操作への対応や履歴管理が格段に安心かつ柔軟になります。ぜひこの記事で学んだ内容を、日々の開発やチーム作業に活かしていただけたら幸いです。

参考資料

以下のリンクは、この記事で解説した手順や概念に関連する参考資料です。より詳しく学びたい方は、ぜひご覧ください。

【番外編】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講師への質疑応答可

関連記事