【Git入門】resetでコミットを取り消す方法を解説!

git resetを使用すれば、誤ってコミットした内容を取り消すことができます。

誤ってコミットしたので取り消したい
resetコマンドの使い方がよくわからない

そんな方に向けて、この記事ではgit resetコマンドを使用してコミットの内容を取り消す方法について、以下の内容を解説していきます!

  • git resetとは
  • git resetのオプション
  • git resetの使い方
  • git resetを取り消す方法

この記事を読めば、git resetでコミット内容を取り消すための一覧の流れを理解できるようになるでしょう。初心者の方はぜひ参考にしてください。

目次

git resetとは

git resetとは、一言で言うと「Gitでコミットした内容を取り消す」ためのコマンドです。そのため、うっかりコミットしてしまった変更内容を取り消したい場合や、変更内容に誤りがあって取り消したい場合によく使うコマンドです。

git resetの書き方

# 指定したファイルをステージングから削除
git reset <file>

# ステージングをリセット
git reset

# 現在のブランチを指定したコミットに戻す
git reset <commit>

# オプション指定。主に [--soft | --hard] [HEAD | HEAD^]
git reset <option> <commit>

git resetコマンドは主にローカルリポジトリに対して行います。リモートリポジトリで公開されているコミットに対してresetを行うと、不整合が発生してしまうので実施しないようにしましょう。

git resetのオプション

ここでは、git resetコマンドでよく使うオプションについて紹介します。

コミットを取り消す(–soft)

コミットのみを取り消したい場合は「–soft」を指定します。

# コミットコードを指定
git reset --soft 取り消しするコミットコード

# 直前のコミットを取り消しする場合
git reset --soft HEAD^

直前のコミットのみを取り消したいときはコミットコードの代わりに「HEAD^」を指定すると便利です。
(以降のオプションについても同様)

コミット内容を全て取り消す(–hard)

コミット内容及びステージングエリアへの移動も取り消したい場合は「–hard」を指定します

# コミットコードを指定
git reset --hard 取り消しするコミットコード

# 直前のコミットを取り消しする場合
git reset --hard HEAD^

git resetの使い方

では実際にgit resetの使い方を見ていきましょう。

事前準備

「/Users/ユーザー名/sample」以下のsample.txtの変更内容をresetで取り消してみます。まずはsampleディレクトリを作成します。

$ mkdir sample
$ cd sample
$ git init
Initialized empty Git repository in /Users/taka/sample/.git/

ファイルsample.txtを作成します。

$ vi sample.txt

sample.txt

Hello Git!

ファイルを作成したら、「git add」コマンドでGitにインデックスの追加、「git commit」コマンドでGitに登録します。

$ git add sample.txt
$ git commit -m “Gitの勉強”

resetで変更内容を取り消す

作成したsample.txtを以下の内容に変更します。

sample.txt

Hello Git!
ファイルの内容を変更

ファイルの内容を変更したら再度コミットします。

$ git add sample.txt
$ git commit -m “Gitの内容変更”

「git log」コマンドでGitのログを確認すると、2回コミットされていることがわかります。

$ git log
commit 0de9e7fac30ab8b42a88c4a7aa36b7f98c77ca3f (HEAD -> master)
Author: yamataka <taka@tk-2.local>
Date:   Mon Sep 10 15:00:02 2018 +0900

    Gitの内容変更

commit 5da09418fc0b1288715b3eb768ca977024a8602f
Author: yamataka <taka@tk-2.local>
Date:   Mon Sep 10 14:56:10 2018 +0900

    Gitの勉強

では実際に「git reset」コマンドでコミットを取り消してみましょう。ここでは最初のコミットを指定します。

$ git reset --hard 5da09418fc0b1288715b3eb768ca977024a8602f
HEAD is now at 5da0941 Gitの勉強

この状態で「git log」コマンドで確認してみると、直前のコミットが取り消されていることがわかります。

$ git log
commit 5da09418fc0b1288715b3eb768ca977024a8602f (HEAD -> master)
Author: yamataka <taka@tk-2.local>
Date:   Mon Sep 10 14:56:10 2018 +0900

    Gitの勉強

また、ファイルも変更内容が取り消されています。

$ cat sample.txt 
Hello Git!

ここではオプションの–hardを指定しましたので、ステージングエリアの移動及びコミットの内容も取り消されています。

誤ってresetしてしまった場合

誤って直前のコミット内容をresetした場合は「ORIG_HEAD」を指定することで元に戻すことができます。

$ git reset --hard ORIG_HEAD

「git log」コマンドで確認すると、コミット内容が元に戻っていることがわかりますね!

$ git log
commit 0de9e7fac30ab8b42a88c4a7aa36b7f98c77ca3f (HEAD -> master)
Author: yamataka <taka@tk-2.local>
Date:   Mon Sep 10 15:00:02 2018 +0900

    Gitの内容変更

commit 5da09418fc0b1288715b3eb768ca977024a8602f
Author: yamataka <taka@tk-2.local>
Date:   Mon Sep 10 14:56:10 2018 +0900

    Gitの勉強

そもそもGitについてよくわからない方へ

そもそもGitについてよくわからない人は、以下の記事にGitやGitHubの基本を解説していますので、参考にしてください!

まとめ

ここではgit resetでコミットした内容を取り消す方法について、以下の内容で解説しました。

  • git resetとは
  • git resetのオプション
  • git resetの使い方
  • git resetを取り消す方法

git resetを使用すれば、誤ってコミットした内容を簡単に取り消すことができますので非常に便利です。もし、resetコマンドについて忘れてしまったら、この記事を思い出してくださいね!

この記事を書いた人

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

目次