この記事では『git resetコマンド』について、
git reset
とはgit reset
のオプションgit reset --soft
git commit
を取り消すコマンドgit reset --soft HEAD~
git reset --mixed
git add
を取り消すコマンド(git commit
実行前)git reset --mixed HEAD
git commit
とgit add
を取り消すコマンドgit reset --mixed HEAD~
git reset --hard
- ファイルの変更と
git add
を取り消すコマンド(git commit
実行前)git reset --hard HEAD
- ファイルの変更、
git commit
、git add
を取り消すコマンドgit reset --hard HEAD~
- 昔のコミット時点の動作確認をするためのコマンド
git reset --hard commit_hash
- ファイルの変更と
などを図を用いて分かりやすく説明するように心掛けています。ご参考になれば幸いです。
git resetとは
git reset
はその名の通りリセット(取り消し)をするコマンドです。主に以下の3つの目的で使用されます。
git commit
の取り消しgit add
の取り消し- 変更したファイルの取り消し
git resetのオプション
git reset
には主に--hard
、--mixed
、--soft
の3つのオプションがあります。それぞれのオプションにおいて、変更を取り消す範囲を以下に示します。
--hard
git commit
、git add
、ファイルの変更の全てを取り消します。- HEAD、インデックス、ワーキングツリーの位置すべてが変更されます。
--mixed
(またはオプション無し)git commit
とgit add
を取り消します。ファイルの変更は取り消しません。- HEADとインデックスの位置が変更されます。ワーキングツリーの位置はそのままです。
--soft
git commit
のみを取り消します。git add
とファイルの変更は取り消しません。- HEADの位置のみが変更されます。インデックスとワーキングツリーの位置はそのままです。
HEADとインデックスとワーキングツリーについて
- HEAD
- 自分が作業をしているブランチの位置です。ブランチの先頭のコミットを指していることが多いです。
- インデックス
- ローカルリポジトリにコミットするファイルを置いておくエリアです。
- 「ステージングエリア」とも呼ばれています。
- ワーキングツリー
- ユーザーが作業中のフォルダです。
- 「ワークツリー」、「ワークディレクトリ」、「作業ディレクトリ」とも呼ばれています。
git reset
のオプションは他にもあります。詳しくはgit reset -h
を実行して確認してください。よく使用するのは--hard
、--mixed
、--soft
です。
これらのオプションを図で説明します。現在のファイルの状態をY
としましょう。
ワーキングツリー、インデックス、HEADの位置は以下の動作を行うことで変更します。
- ワーキングツリーの位置
- ファイルを変更したらワーキングツリーの位置が変更します。
- インデックスの位置
git add
したらインデックスの位置が変更します。
- HEADの位置
git commit
したらHEADの位置が変更します。
上図に示すようにファイルの変更、git add
、git commit
してファイルの状態がZ
に移ったとします。この時、以下のgit reset
コマンドを実行すれば、これらの変更を取り消すことができます。
git reset --hard HEAD~
- HEAD、インデックス、ワーキングツリーの位置すべてを
Y
に戻す。
- HEAD、インデックス、ワーキングツリーの位置すべてを
git reset --mixed HEAD~
- HEADとインデックスの位置を
Y
に戻す。
- HEADとインデックスの位置を
git reset --soft HEAD~
- HEADの位置のみを
Y
に戻す。
- HEADの位置のみを
ではこれから、git reset
の各オプションについて順番に詳しく説明していきます。
git reset --soft
--soft
オプションはHEADの位置のみを変更するオプションです。git commit
のみ取り消したい場合に、--soft
オプションを用います。
インデックスやワーキングツリーには影響がないので、ファイルの変更は残ります。
git reset --soft
に関連するコマンドをこれから説明します。
git commitを取り消すコマンド
git reset --soft HEAD~
#以下のコマンドでも可能
git reset --soft HEAD~1
git reset --soft HEAD^
git reset --soft @~
git reset --soft @~1
git reset --soft @^
上記のコマンドを実行すると、「git commit
する直前」の状態に戻ります。まだ作業をしているのに間違えてコミットしてしまった場合に使用します。
git reset --soft HEAD~
は「HEADの位置」を「直前のコミットHEAD~の位置」にリセットするという意味になります。
補足
コミットメッセージを間違えた場合には、以下のコマンドを実行したほうが楽なのでおすすめです。
git commit --amend -m "変更後のコメントメッセージ"
git reset --mixed
--mixed
オプションはHEADとインデックスの位置を変更するオプションです。git add
やgit commit
を取り消したい場合に、--mixed
オプションを用います。git reset
でオプションを指定しないときのデフォルトです。
ワーキングツリーには影響がないので、ファイルの変更は残ります。
git reset --mixed
に関連するコマンドをこれから説明します。
git addを取り消すコマンド(git commit実行前)
git reset --mixed HEAD
#以下のコマンドでも可能
git reset HEAD
上記のコマンドを実行すると、git add
を取り消すことができます。
git reset --mixed HEAD
は「HEADとインデックスの位置」を「HEADの位置(最後にコミットした位置)」にリセットするという意味になります。
git commitとgit addを取り消すコマンド
git reset --mixed HEAD~
#以下のコマンドでも可能
git reset --mixed HEAD~1
git reset --mixed HEAD^
git reset --mixed @~
git reset --mixed @~1
git reset --mixed @^
git reset HEAD~
git reset HEAD~1
git reset HEAD^
git reset @~
git reset @~1
git reset @^
上記のコマンドを実行すると、「git add
とgit commit
をする直前」の状態に戻ります。間違えてgit add
とgit commit
を実行して、コミットしてしまった場合に使用します。
git reset --mixed HEAD~
は「HEADとインデックスの位置」を「直前のコミットHEAD~の位置」にリセットするという意味になります。
git reset --hard
--hard
オプションはHEAD、インデックス、ワーキングツリーの位置を変更するオプションです。
ワーキングツリーの変更も削除するため、慎重に使用してください。--hard
オプションを用いると、基本的にはすべて消えます。
git reset --hard
に関連するコマンドをこれから説明します。
ファイルの変更とgit addを取り消すコマンド(git commit実行前
git reset --hard HEAD
コミット後、いろいろ作業したが、それらの変更を全て取り消したい場合には、上記のコマンドを実行します。上記のコマンドを実行すると、ファイルの変更やgit add
を取り消すことができます。
git reset --hard HEAD
は「HEADとインデックスとワーキングツリーの位置」を「HEADの位置(最後にコミットした位置)」にリセットするという意味になります。
ファイルの変更、git commit、git addを取り消すコマンド
git reset --hard HEAD~
#以下のコマンドでも可能
git reset --hard HEAD~1
git reset --hard HEAD^
git reset --hard @~
git reset --hard @~1
git reset --hard @^
直前のコミットを丸ごと削除したい場合には、上記のコマンドを実行します。上記のコマンドを実行すると、ファイルの変更、git add
、git commit
を取り消すことができます。
コミットした内容がワーキングツリーに残す必要すらないほど余計なものだった場合に使用します。
git reset --hard HEAD~
は「HEADとインデックスとワーキングツリーの位置」を「直前のコミットHEAD~の位置」にリセットするという意味になります。
昔のコミット時点の動作確認をするためのコマンド
git reset --hard <commit_hash>
コミット値を指定すると、指定した時点までHEAD、インデックス、ワーキングツリーの位置を戻すことができます。
ただ、昔のコミット時点の動作確認をしたい場合には、以下のコマンドを実行して、動作確認したい位置にチェックアウトする方が安全です。
git checkout-b <commit_hash>
補足
該当コミットのハッシュ値はgit reflog
やgit log
から調べることができます。
本記事のまとめ
この記事では『git resetコマンド』について、以下の内容を説明しました。
git reset
とはgit reset
のオプションgit reset --soft
git commit
を取り消すコマンドgit reset --soft HEAD~
git reset --mixed
git add
を取り消すコマンド(git commit
実行前)git reset --mixed HEAD
git commit
とgit add
を取り消すコマンドgit reset --mixed HEAD~
git reset --hard
- ファイルの変更と
git add
を取り消すコマンド(git commit
実行前)git reset --hard HEAD
- ファイルの変更、
git commit
、git add
を取り消すコマンドgit reset --hard HEAD~
- 昔のコミット時点の動作確認をするためのコマンド
git reset --hard commit_hash
- ファイルの変更と
お読み頂きありがとうございました。