Commitを取り消したい人に送る、「30秒」で解決する方法【Git入門】

git commit -m ‘◯◯機能の実装、バグ修s’

あっ!やべっ!コミットメッセージ間違えた!

git commit -m ‘不具合修正’

あっ!しまった!不具合直ってないけどコミットしちゃった!

こんな形で間違ってコミットしてしまったそこのあなた! 慌てないで、冷静に今すぐ元にもどしましょう。戻す方法が大きく3つあります。今のあなたの状況によって使い分けてくださいね。Git自体について知りたい人は先にこの記事を見て予習しておきましょう!

目次

結論 ~今すぐCommit取り消す方法~

Commitだけ取り消したい場合

git reset --soft [どこまで戻すか、直前のコミットの場合はHEAD^を使用]

// 例
git reset --soft HEAD^

Commitと変更したファイルも一緒に戻したい

git reset --hard [どこまで戻すか、直前のコミットの場合はHEAD^を使用]

// 例
git reset --hard HEAD^

addしたファイルを元に戻したい

git reset [どこまで戻すか、直前のコミットの場合はHEAD^を使用]
// 例
git reset HEAD

※オプションパラメータは何もつけなくても大丈夫です。

もっと細かい説明が必要な方は次の章で説明していきます!

softオプションを使ってCommitだけ取り消す

先程の章ではコミットだけ取り消したい場合として紹介しました。ちょっとしたミスでコミットコマンドを打ったことをなかったことにしたい場合は次のようにsoftオプションを付けることで解決することができます。

git reset --soft HEAD^

実際に使うケース(想定)

  • コミットメッセージを間違えてしまった、内容と違うコミットメッセージにしてしまった
  • 操作ミスでコミットしてしまった

hardオプションを使って変更とCommit両方を取り消す

先程の章ではコミットと変更したファイルも一緒に戻したいとして紹介しました。

この場合では、コミットをなかったことにするだけでなく前のコミットから変更したファイルなど変更内容自体も一緒になかったことにしたい場合にhardオプションを付けることで解決することができます。

git reset --hard HEAD^

実際に使うケース(想定)

  • コミットしたはいいけど、ファイルの変更自体意味がなかったからコミットもファイル変更ももとに戻したい

特定のコミットを取り消したい

特定の場所まで一気にコミットを取り掛けしたい場合は、「ハッシュ値」というものを指定することで実現することができます。

たとえば、これまでの解説でHEAD^と表記したものは「直前のコミット」という意味がありますが、このパラメータを置き換える形でハッシュ値を指定することでそのハッシュ値が指定する場所まで巻き戻ることができます。

そんなにハッシュ値と言われても・・・ハッシュ値が何かわからないと思ったあなた。ここでいうハッシュ値とは、コミットした際には必ずハッシュ値という英数字が混ざった値が作られます。

この値は他の値とかぶらないため毎回別のハッシュ値が作られるようになっています。つまり、コミット自体に自動でつく名前のようなものだと思っていただければ簡単ですかね?

次のコマンドでハッシュ値を確認することができます。

git log --pretty=oneline

実行結果例:

8b709245c66ddcfdd81b87cf89419b3265d0a1d9 (HEAD -> master) First Commit

ここでいうところの8b709245c66ddcfdd81b87cf89419b3265d0a1d9がハッシュ値になります。

ツールを使ってCommitを取り消す方法

最後に、コマンドを使ってコミットを取り消す方法ではなくツール上から取り消す方法について説明していきたいと思います!

IntelliJを使ってCommitを取り消す

まずは最近、プログラマの間で流行りつつあるIntelliJを使ったコミットの取消方法です。IntelliJの場合は公式ドキュメントが充実しているため変更を元に戻す場合どうするかもしっかり記載があります!(これは心強いですよね!)

変更を元に戻す – ヘルプ | IntelliJ IDEA

  • コミットされていない変更を元に戻す
  • 最後のコミットを元に戻す

といった内容を見ていくことで取り消すことが可能です!

Eclipseを使ってCommitを取り消す

次に、IDE(統合開発環境)の定番中の定番、Eclipseの方法です。

EclipseにはEgitというプラグインがあるためこのEgitを使ってコミットを取り消す方法になります。こちらは、公式サイトでの解説ではないですが次のサイトをご覧いただければ解決できるかと思います。

EclipseのEGitでリセットをする方法

SourceTreeを使ってCommitを取り消す

Windows版やMac版、Linux版がある無料のGitツールSourceTreeを使った場合の方法です。

通常Gitはコマンドを叩いて実行しますが、SourceTreeを使うことでファイルの状態やブランチの状態などを可視化でき、GUIベースで操作することが可能です。

特に、次のサイトは画像付きで解説しているため初めてSourceTreeを使う方でも安心してコミットの取り消しができるかと思います!

SourceTreeでコミットを取り消す

まとめ

いかがだったでしょうか?

間違ってコミットしてしまったとしても慌てる必要はありません。

プッシュと違いコミットは自分の作業スペースを変えるだけなので間違えてコミットしてしまった場合や、ファイルの変更も含めてもとに戻したい場合は本記事にあるようにgit resetを使うことで実現することができます。

それぞれ、状況に応じてgit resetコマンドのオプションも使い分けてくださいね。

この記事を書いた人

【プロフィール】
DX認定取得事業者に選定されている株式会社SAMURAIのマーケティング・コミュニケーション部が運営。「質の高いIT教育を、すべての人に」をミッションに、IT・プログラミングを学び始めた初学者の方に向け記事を執筆。
累計指導者数4万5,000名以上のプログラミングスクール「侍エンジニア」、累計登録者数1万8,000人以上のオンライン学習サービス「侍テラコヤ」で扱う教材開発のノウハウ、2013年の創業から運営で得た知見に基づき、記事の執筆だけでなく編集・監修も担当しています。
【専門分野】
IT/Web開発/AI・ロボット開発/インフラ開発/ゲーム開発/AI/Webデザイン

目次