この記事の背景
Gitでトラブった時に助けてくれるgit restのコマンド集を集めてみました。
git reset --soft (commit)
直前のコミットをなかったことにして、変更内容をインデックスに残しておく時に使います。
git reset --soft HEAD~1
git reset --mixed (commit)(デフォルト)
コミットとインデックスをリセットし、作業ツリーはそのままで、
指定したコミットまで戻し、変更をインデックスから外しつつ作業ツリーには残す時に使います。
git reset --mixed HEAD~1
--mixedはデフォルト
なので、次のように省略しても同じ挙動です。
git reset --hard (commit)
コミット、インデックス、作業ツリー全てを指定したコミットの状態にリセットします。
指定したコミットまで完全に戻し、以降の変更をすべて破棄する時に使います。
注意‼️ 作業ツリー内の変更が失われるため、注意が必要です。
git reset --hard HEAD~1
git reset --merge (commit)
マージ時のコンフリクト解消中に、マージに関わるファイルのみリセットします。
マージに失敗した場合に、マージに関連するファイルのみをリセットしたいときに使います。
git reset --merge
git reset --keep (commit)
指定したコミットに戻し、作業ツリーにある変更がコンフリクトしない場合のみリセットします。
作業ツリーの変更を残したままリセットするが、コンフリクトが発生しない場合のみ成功させたいときに使います。
git reset --keep HEAD~1
git resetをなかったことにする
git reset --hard ORIG_HEAD
バックアップのすすめ
--hard オプションでは、データが完全に消される
ので、
重要な変更がある場合はgit stash
やgit commit
を使ってバックアップを取っておくといいと思います。
git reflog
過去のコミットの「参照ログ」を表示するコマンドです。
git checkout、git commit、git pull などで HEAD がどのように移動したかがわかるので、
間違えて、変更を上書き、削除しても、git reflog によって元の状態を確認・復元できます。
git reflog
資料
ChatGPT