この記事では『git resetコマンド』について、
git resetとはgit resetのオプションgit reset --softgit commitを取り消すコマンドgit reset --soft HEAD~
git reset --mixedgit 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つのオプションがあります。それぞれのオプションにおいて、変更を取り消す範囲を以下に示します。
--hardgit commit、git add、ファイルの変更の全てを取り消します。- HEAD、インデックス、ワーキングツリーの位置すべてが変更されます。
--mixed(またはオプション無し)git commitとgit addを取り消します。ファイルの変更は取り消しません。- HEADとインデックスの位置が変更されます。ワーキングツリーの位置はそのままです。
--softgit 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 --softgit commitを取り消すコマンドgit reset --soft HEAD~
git reset --mixedgit 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
- ファイルの変更と
お読み頂きありがとうございました。