git reset

HEADを特定のコミットにリセットし、ステージングを更新するコマンド

コマンドの概要

HEADを指定したコミットに移動させ、そのコミットの内容をモードに従いワーキングツリーおよびインデックスに展開するコマンド。
git commitの取り消し、git addの取り消しなどに利用する。
git reset --soft HEADだけ移動させる
git reset --mixed HEADを移動させて"インデックス"をその"コミット"の内容で展開
git reset --hard HEADを移動させて"ワーキングツリー"と"インデックス"をその"コミット"の内容で展開

コマンドの使い方

モード及び対象とするコミットを指定する。
それぞれ、--mixed HEADがデフォルトで指定されており、省略可。

$ git reset
// git reset --mixed HEAD と同じ

とすると、HEADHEADコミットに移動させ(=HEADは動かない)、HEADコミットの内容をインデックスに展開するが、ワーキングツリーはHEADコミット後作業内容を保持したままにする。
すなわち、HEADコミット後のgit add操作を取り消しgit addがなかった状態になる。

$ git reset --soft
// git reset --soft HEAD と同じ

では、HEADHEADコミットに移動させ(=HEADは動かない)、ワーキングツリーとインデックスには何もしない。すなわち、何もおこらない。

git add を取り消す

$ git reset HEAD

// 特定のファイルのみ取り消す
$ git reset HEAD <file>

HEADは移動させず、インデックスへHEADコミットの内容を展開するので、インデックスがgit add操作前の状態になる。

コミットをやりなおす

直前のコミットを取り消す = HEADコミットのひとつ前のコミットに戻りつつ、インデックスの作業内容は保持する。 HEADをひとつ前のコミットに移動させればよい。

$ git reset --soft HEAD^

コミットとgit add を取り消す

直前のコミットとgit addを取り消す = HEADコミットのひとつ前にコミットに戻るとともに、インデックスはHEADコミットの内容とする。ワーキングツリーの内容は保持する--mixedを利用する。

$ git reset HEAD^
$ git reset --mixed HEAD^

コミットに戻したいとき

コミット後のワーキングツリーの編集内容とgit add操作をなかったものとしたい = ワーキングツリーとインデックスにHEADコミットの内容を展開する。

$ git reset --hard HEAD

関連するコマンド

git restore : コミット、インデックスから内容を復元する
git checkout : 特定のコミットに移動する

Last modified 2020.06.11