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コマンドについて忘れてしまったら、この記事を思い出してくださいね!