誤ってcommitをしてしまい、取り消そうと思い、以下のコマンドを実行しました。
$ git reset --hard HEAD^
HEAD is now at 64xxxx first commit
すると作業していたローカルのファイルが全て消えており、驚き。
詰んだな・・・と
$ ll
total 0
drwxr-xr-x@ 2 local local 64 3 1 10:58 .
drwxr-xr-x@ 5 local local 160 3 1 10:49 ..
git reset --hard HEAD^ を実行すると、直前のコミットを削除し、かつ作業ディレクトリのファイルもその状態に巻き戻すため、ローカルの変更もすべて消えてしまうとのことでした。
これがお客様の環境ではなくてよかったと心底ホッとしました。
インデックスと作業ツリーをリセットします。それ以降の作業ツリー内の追跡ファイルへの変更はすべて破棄されます。追跡ファイルの書き込みの邪魔になる追跡されていないファイルまたはディレクトリは、単に削除されます。
なので単にcommitを取り消したい場合は、以下のコマンドを実行すべきでした。
git reset --soft HEAD^
インデックス ファイルや作業ツリーにはまったく触れません (ただし、すべてのモードと同様に、ヘッドを にリセットします)。これにより、変更されたすべてのファイルが「コミットされる変更」のままになります。
また今回削除されてしまいましたが、復旧方法もありました。
まずリセット前のコミットを探し、リセット前のコミットIDを探します。
$ git reflog
64xxxxx (HEAD -> main, origin/main) HEAD@{0}: reset: moving to HEAD^
8bxxxxx HEAD@{1}: commit: xxxxxxxx ##←ここのID
コミットIDを指定して、resetを行うことで戻すことができました。
$ git reset --hard 8bxxxxx
HEAD is now at 8bxxxxx xxxxxxx
これが本当に自分の環境でよかったと心底安心しています。。