【解決】Gitのcommitは取り消しできる!push前・push済みでも戻せます!

git-commit-cancel_thum

九十九すい

こんにちは!九十九すいです!Gitで間違えてcommitしてしまったときに、コマンドで取り消す方法を教えてもらうよ!

こんな疑問をもったあなたにおすすめ!
  • Gitでcommitするデータを間違えてしまった…
  • commitのコメントだけを修正する方法は?
  • 他の人がcommitしたデータに戻したい!

commitをミスしてしまってもコマンドを知っていれば、簡単に元に戻すことができます!

commitを戻す関連のコマンドの例
  • git reset –hard HEAD^ → 直前のcommitを履歴ごと取り消す
  • git revert –no-edit HEAD^ → 直前のcommitの履歴を残したまま取り消す
  • git commit –amend “修正メッセージ” → 直前のcommitのコメントを修正

このようにcommitを修正する方法がいくつもあるため、細かい修正方法を選択できます。

ただし、共同作業しているときには連携が肝心です。

commitを慌てて取り消してしまい、他の作業者のcommitまで消してしまえば目も当てられません。

プロジェクト責任者もしくは、チームメンバーに事前に連絡を取り、commitを取り消す報告を必ずしましょう。

ここからは各コマンドの解説と実際の使い方を紹介していきます。

GitやGitHubの基礎知識に不安のある方は書籍での勉強もおすすめです!

ぜひ手元においていつでも見直せるようにしてみてください。

目次

commitを取り消す2大コマンド

commitを取り消す2大コマンド
  • commitを履歴ごと取り消す『git reset –hard HEAD^』
  • commitの履歴は残して取り消す『git revert –no-edit HEAD』

履歴ごと取り消す『git reset –hard HEAD^』は削除後の取り消しは基本できないと考えた方が無難です。

複数人で編集作業をしているときには、注意して使いたいコマンドです。

普段使いをするなら、履歴は残して取り消す『git revert –no-edit HEAD』がおすすめです。

これはコミットした履歴は残りますが、内容も保持されるため、commit取り消しのミスの被害を押さえることができます。

九十九すい

どちらを使用するにしても、複数人で取り組んでいるのなら一言連絡した方が無難だね…

commitを履歴ごと取り消す『git reset –hard HEAD^』

『git reset –hard HEAD^』コマンドは、直前のコミットを履歴ごと取り消すために使用される強力なコマンドです。

このコマンドを使用すると、作業ディレクトリの状態も前のコミットの状態に戻すことができます。

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

機能追加A
機能追加B ← 最新のコミット(HEAD)

この時点で、機能追加Bを取り消すために『git reset –hard HEAD^』 を実行すると、履歴は以下のようになるのです。

機能追加A
#機能追加Bのコミットは完全に消去され、作業ディレクトリも機能追加Aの状態に戻ります。

このコマンドでの取り消しは、元に戻すことが難しいため、慎重に使用する必要があります。

git reset–hard HEAD^の解説

  • HEAD^:現在のHEAD(最新のコミット)の親コミットを指します。
  • –hard:コミット履歴だけでなく、作業ディレクトリの変更もすべて取り消します。

『git reset –hard HEAD^』に失敗した場合の対処法

万が一、誤って『git reset –hard HEAD^』を実行してしまったとき、『git reflog』を使用して元のコミットを復元できることがあります。

『git reflog』でリポジトリの全ての操作履歴を確認し、戻したいコミットのハッシュを見つけます。

その後、その見つけたハッシュを使ってリセットを行います。

例:『git reset –hard <git reflogで探したコミットハッシュを入力する>』

このコマンドで取り消したcommitを復元できる可能性があります。

とーるくん

戻せる可能性があるとはいえ、復元と削除を繰り返していたら現場は大混乱です…

commitの履歴は残して取り消す『git revert –no-edit HEAD』

『git revert –no-edit HEAD』コマンドは、直前のコミットを取り消すために使用されます。

しかし『git reset –hard HEAD^』とは異なり、元のコミット履歴を保持したまま、コミットの修正を行います。

この方法は履歴を明確に保ちつつ、不要な変更を元に戻すのに便利です。

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

機能追加A
機能追加B ← 最新のコミット(HEAD)

この時点で、機能追加Bの変更を取り消すために『git revert –no-edit HEAD』を実行すると、履歴は以下のようになります。

機能追加A
機能追加B
機能追加Bの修正を削除したコミット ← revertにより追加されたコミット

git revert –no-edit HEAD^の解説

  • HEAD^:現在のHEAD(最新のコミット)の親コミットを指します。
  • –no-edit:リバートコミットのメッセージ編集をスキップし、デフォルトのリバートメッセージをそのまま使用します。

このコマンドは元のコミットを保持しつつ、その変更を打ち消す新しいコミットを作成します。

そのため履歴が分かりやすく、複数人での作業において、リバートコミットを使用することで誰が何を取り消したのかが明確にわかります。

九十九すい

連絡がつかないときや、自分の判断でcommitを修正したいときは『revert』の方が良さそうだね!

『Git・Github』をもっと深くまで知るなら、実際の操作画面を見ながら解説してくれる動画講座のUdemyがおすすめです!

Udemy一般的な
ITスクール
値段1,500円~
※毎月割引あり
平均
100,000円以上
講座数210,000講座以上平均10コースほど
受講時間
(期間)
約10~[h]
(最短1日から)
約200[h]
(平均2~3ヶ月)
講師への質問講座によるできる
Udemyと一般的なITスクールの比較

\【視聴期限なし】 今だけ1,500円~すぐに学べる

30日以内なら返金無料!

commitの編集ができるコマンド

commitの編集ができるコマンド
  • commitのメッセージを修正する『git commit –amend “修正メッセージ”』
  • 直前のcommitを上書き『git commit –amend』
  • 特定のファイルだけ追加してコミットを修正『git add <ファイル名> git commit –amend –no-edit』

commitのメッセージを修正する『git commit –amend “修正メッセージ”』

『git commit –amend』コマンドは、直前のコミットのメッセージを修正するために使用できます。

このコマンドを使用することで、誤ったコミットメッセージを簡単に修正できるのです。

たとえば以下のようなコミットメッセージがあるとします。

abc1234 初期コミット
def5678 機能追加A ← 最新のコミット(HEAD)

この時点で、最新のコミットメッセージ「機能追加A」を「機能追加A(バグ修正含む)」に修正したいとき、次のコマンドを実行します。

『git commit –amend -m “機能追加A(バグ修正含む)”』

実行後のコミット履歴は以下のようになります。

abc1234 初期コミット
def5678 機能追加A(バグ修正含む) ← 修正された最新のコミット(HEAD)

git commit –amend -m “修正メッセージ”の解説

  • –amend:直前のコミットを修正するオプションです。
  • -m “修正メッセージ”:新しいコミットメッセージを指定します。

これは直前のコミットのみ修正可能なコマンドです。

それ以前のコミットのコメントを修正したいときは、『git rebase -i HEAD~n』を使用する必要があります。

上記は、nつ前のコミットのコメントを修正するためのコマンドです。

とーるくん

混乱させないように、できるだけ直前のコメントだけを変えたほうが無難です…

直前のcommitを上書き『git commit –amend』

『git commit –amend』コマンドは、直前のコミットを上書きするために使用されます。

このコマンドを使用すると、最新のコミットに新しい変更を追加したり、誤った内容を修正したりすることができます。

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

abc1234 初期コミット
def5678 機能追加A ← 最新のコミット(HEAD)

この時点で最新のコミットに含めるべきファイルを忘れてしまったときは、以下の手順でその変更を追加することができます。

含め忘れたファイルを作業ディレクトリに追加します。

echo "追加の変更" > 追加ファイル.txt
git add 追加ファイル.txt

次に『git commit –amend』を実行して直前のコミットを上書きします。

これによりエディタが開き、コミットメッセージを確認または変更することができます。

その後、エディタを保存して閉じると、直前のコミットが上書きされます。

実行後のコミット履歴は以下のようになります。

$ git log --oneline
abc1234 初期コミット
def5678(修正済み) ← 修正された最新のコミット(HEAD)

git commit –amend “直前のコミットを上書きの解説

  • –amend:直前のコミットを修正するオプションです。エディタが開き、コミットメッセージを変更することができます。

注意するべきこととして、git commit –amend は直前のコミットを上書きするため、履歴が変更されます。

このため、リモートリポジトリにプッシュする前に使用することが推奨されます。

既にリモートリポジトリにプッシュされたコミットを修正した場合、再度プッシュする際にはフォースプッシュ(git push –force)が必要です。

九十九すい

『フォースプッシュ(git push –force)』は他の作業者に影響を与える可能性があるので注意してね!

特定のファイルだけ追加してコミットを修正『git add <ファイル名> git commit –amend –no-edit』

『git add <ファイル名> git commit –amend –no-edit』は、コミットしたときに一部のファイルを含め損ねたときに使えるコマンドです。

具体的には、直前のコミットに特定のファイルを追加して修正することができます。

忘れた変更を追加したり、誤ったコミットを修正したりすることが可能です。

$ git log --oneline
abc1234 初期コミット
def5678 機能追加A ← 最新のコミット(HEAD)

機能追加Aのコミットに含めるべき「ファイル.txt」を忘れてしまったとき、以下の手順でその変更を追加することができます。

機能追加Aのコミットに含めるべき「ファイル.txt」手順
  • 追加するファイルをステージに追加
  • git add 忘れたファイル.txt
  • コミットを上書き
  • git commit –amend –no-edit を実行して直前のコミットを上書き

これにより、コミットメッセージを変更せずに、直前のコミットに新しい変更が追加されます。

$ git log --oneline
abc1234 初期コミット
def5678(修正済み) ← 「ファイル.txt」が追加された最新のコミット(HEAD)

git commit –amend -m “修正メッセージ”の解説

  • –amend:直前のコミットを修正するオプション
  •  –no-edit:エディタを開かずに、前回のコミットメッセージをそのまま使う

このコマンドを使用すると、直前のコミットが上書きされます。

履歴が変更されるため、リモートリポジトリにプッシュする前に使用することが推奨されます。

これは直前のコミットに特定のファイルを追加して修正するための便利な方法です。

とーるくん

忘れた変更を追加したり、誤ったコミットを修正したりするときに有効ですね!

revent(commitの履歴は残して取り消す)の編集ができるコマンド

revent(commitの履歴は残して取り消す)の編集ができるコマンド
  • commitのIDを指定して取り消す『git revert –no-edit {コミットID}』
  • 直前のreventを取り消す『git reset –hard HEAD^』

commitのIDを指定して取り消す『git revert –no-edit {コミットID}』

前述の『git revert –no-edit HEAD』は直前のコミットを取り消すために使用しました。

しかし、時には特定の古いコミットを取り消したい場合があります。

そんな時は、『git revert –no-edit {コミットID}』を使用します。

『git revert –no-edit {コミットID}』の特徴
  • 履歴を保持:『git reset』とは異なり、取り消したいコミットの履歴は残ります。
  • 新しいリバートコミットを作成:取り消したコミットの変更を打ち消す新しいコミットが作成されます。
  • 複数人での作業に適している:履歴が明確に残るため、誰がどのコミットを取り消したかが分かります。
Copy codeabc1234 初期コミット
def5678 機能追加A
ghi9101 バグ修正
jkl1121 機能追加B ← 最新のコミット(HEAD)

ここで「機能追加A」(コミットID: def5678)に問題があり、取り消したいときは『git revert –no-edit def5678』を実行します。

Copy codeabc1234 初期コミット
def5678 機能追加A
ghi9101 バグ修正
jkl1121 機能追加B
mno1314 Revert "機能追加A" ← 新しく追加されたリバートコミット

このコマンドは便利ですが、取り消したいコミットが他のコミットの前提となっている場合、単純に取り消すと問題が生じる可能性があります。

履歴を保持しながら変更を打ち消すため、複数人での開発において透明性が高く安全ですが、このように問題点もあります。

九十九すい

大丈夫だからと勝手に消してしまうと大きな問題になることもあるよ!だからチームに相談するのが一番良いんだね!

直前のreventを取り消す『git reset –hard HEAD^』

『git reset –hard HEAD^』は、revertコマンドを使用した後に、そのrevertを取り消したい場合に役立ちます。

時にはrevertコマンドを実行した直後に「やっぱりrevertするべきではなかった」と気づくことがあります。

そんな時に使えるのが『git reset –hard HEAD^』です。

Copy codeabc1234 初期コミット
def5678 機能追加A
ghi9101 バグ修正
jkl1121 機能追加B
mno1314 Revert "機能追加A" ← 直前のリバートコミット

ここで「やっぱり機能追加Aは必要だった」と気づいた場合、『git reset –hard HEAD^』を実行します。

Copy codeabc1234 初期コミット
def5678 機能追加A
ghi9101 バグ修正
jkl1121 機能追加B ← 最新のコミット(HEAD)

直前のreventを取り消す『git reset –hard HEAD^』の解説

  • reset:指定したコミットにブランチのHEAD(先端)を移動させます。これにより、そのコミット以降のコミット履歴が変更されます。
  • –hard:指定したコミットの状態に全てを完全に戻します。
  • HEAD^:直前のコミットを指します。

『git reset –hard』は作業ディレクトリの変更も取り消すため、コミットされていない変更がある場合は失われてしまいます。

またコマンドはコミット履歴を書き換えるため、他の人と共有しているブランチでは使用を避けるべきです。

すでにリモートにpushされたコミットに対してこのコマンドを使うと、ローカルとリモートの履歴が不一致になります。

『git reset –hard HEAD^』を誤って実行してしまった場合、『git reflog』を使って復元できることがあります。

とーるくん

HEAD^^は2つ前、HEAD~nはn個前のコミットを指しますよ!

GitとGitHubを学習するならUdemyがおすすめ!

GitとGitHubを学習するならUdemyがおすすめ!

Gitのさまざまなcommitやrevertなどのテクニックを見てきました。

これらの知識は、個人やチームでのプロジェクト管理に非常に役立ちます。

しかし、GitとGitHubの世界はまだまだ広く、今回紹介した内容は氷山の一角に過ぎません。

GitとGitHubをより深く理解し、プロフェッショナルな開発者になるためには、体系的な学習が必須です。

そこでおすすめなのは、最大90%オフになるのでコスパが良く、動画の分かりやすい解説で時短に繋がるUdemyの講座です。

Udemyがおすすめな理由
  • 実践的なコンテンツ:Udemyの講座は現役のエンジニアや教育者によって作られています。
  • 初心者から上級者まで:「Git入門」から「GitとGitHubによる高度なチーム開発手法」まで、レベルに合わせた講座が豊富です。
  • 手軽に学習:動画形式なので、通勤時間や休憩時間を利用して、スマホやタブレットで気軽に学習できます。
とーるくん

文字だけですとどこに入力するのか分かりづらいので、動画はありがたいです~!

「Git・Github」を学べるおすすめUdemy講座
  • 「Git & GitHub完全入門」:初心者向けに、基本からブランチ戦略まで丁寧に解説。
  • 「現場で使える実践的Git」:中級者向けに、リベースやチェリーピックなど高度なテクニックを学びます。
  • 「GitHubでチーム開発:プルリクエスト編」:GitHubを使ったチーム開発のワークフローを学びます。

Udemyの動画コースを活用すれば、初心者から上級者まで、自分のペースで体系的に学習できます。

GitとGitHubをマスターすることで、個人の生産性が上がるだけでなく、チームでの評価も高まるでしょう。

九十九すい

Udemyで学習を始めて、GitとGitHubのプロフェッショナルを目指してね!

\【視聴期限なし】 今だけ1,500円~すぐに学べる

30日以内なら返金無料!

Git commit 取り消しのよくある質問

Q&A

直前のcommitを取り消したいのですが、作業内容は残したいです。どうすればいいですか?

『git reset –soft HEAD^』を使用してください。

このコマンドは直前のcommitを取り消しますが、変更内容はステージング領域に残ります。

その後、必要に応じて変更を修正し、再度commitできます。

commitメッセージを間違えてしまいました。修正する方法はありますか?

直前のcommitのメッセージを修正するには、『git commit –amend -m “新しいメッセージ”』を使用します。

ただし、既にpushしたcommitのメッセージを変更すると、『git push –force』が必要になるので注意が必要です。

間違えてcommitを取り消してしまいました。元に戻す方法はありますか?

『git reflog』を使用して、過去の操作履歴を確認できます。

取り消す前のcommitのハッシュを見つけたら、『git reset –hard <commit-hash>』で戻せます。

ただし、git reflog のログは一定期間後に削除されるので、すぐに気づくことが重要です。

【結論】Git力を磨いて、開発者としての価値を高めよう!

Git力を磨いて、開発者としての価値を高めよう!
この記事のまとめ
  • コミットするデータを間違えたのなら、直前の履歴を残したまま取り消せる『git revert –no-edit HEAD』!
  • コミットのコメントを修正するなら『git commit –amend “修正メッセージ”』!
  • 『git revert –no-edit {コミットID}』で指定したコミットを修正できる!

Git commitの取り消しは、個人やチームの開発効率を大きく左右します。

この記事で学んだコマンドを使いこなせば、ミスを素早く修正でき、プロジェクトの進行を早められるでしょう。

しかし、Gitの世界はまだまだ広がっており、学ぶべきことがたくさんあります。

そこで実際の操作画面を見ながら効率よく勉強ができるUdemyの動画講座がおすすめです。

現役エンジニアによる実践的な講座で、初心者から上級者まで、自分のペースで深く学べます。

Git & GitHubをマスターすることで、あなたの市場価値は確実に上がります。

エラーに慌てることなく、チームのワークフローを最適化し、大規模プロジェクトも難なくこなせるようになるのです。

今すぐUdemyでGit & GitHubを学び、開発者としての価値を高めましょう。あなたのキャリアアップが、ここから始まります!

\【視聴期限なし】 今だけ1,500円~すぐに学べる

30日以内なら返金無料!

TechMoire(テックモワ)では、web3(AI / メタバース)やITスクールの情報などを中心に情報を発信しております。

もしよければ、X(@TechMoire)のフォローなどもよろしくお願いします。

一緒に最新技術を楽しんでいきましょう!

九十九すい

それでは、ありがとうございました! 

管理者情報

ITコンサルタント

あらき きりん

現役ITコンサルタント 兼 Webディレクターとして従事。2015年に未経験からITスクールに入学。その後、EdTech企業にて、IT講師として大手企業や個人受講生に向けた授業(Webデザイン、プログラミング、マーケティング、ディレクションなど)を担当。スクールキャリアカウンセラーとして、述べ1,000人以上のキャリアサポートや授業を経験。現在は、IT系メディアの運営や企業ITサポート、Web制作をしながら、web3についての情報を発信しています。本メディアの記事はすべて、わたしが監修しています。

  • URLをコピーしました!
目次