Git
reflog
reset
head

git reset HEAD^を取り消す方法

通常、addしたファイルを取り消したい時は、git reset HEADでファイルを指定する。

しかし、addしたファイルを戻すつもりが間違って git reset --soft HEAD^をしてしまい、HEADが一つ前に戻ってしまった。

つまり、特に変更点も無いままHEADを一つ前に戻したため、過去の内容が自分のステージングに残ってしまったのである。

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    modified:   app/assets/stylesheets/test.sass #最新(HEAD)のファイル
    modified:   app/assets/stylesheets/hoge.sass #最新(HEAD)のファイル
    modified:   app/assets/stylesheets/fuga.sass #最新(HEAD)のファイル
    modified:   app/model/sample.rb #ワークツリーに戻すはずだったファイル。。。

なので、git resetをなかったことにする必要がある。
ここからは以下のコマンドを打ちましょう。

git reflog

これを打てば過去のいろんなコミット履歴を見ることができる。

2cd8dd2 HEAD@{0}: reset: moving to HEAD^ #pullした最新コミットを取り込んでしまった...
9dacb9a HEAD@{1}: checkout: moving from master to fix_test #このコミット状態に戻したい
9dacb9a HEAD@{2}: checkout: moving from fix_sample to master #masterに移動した
01394a8 HEAD@{3}: commit: 一括表示をconcatで呼べるように変更

最後に戻したいコミットを --softの次に指定してあげましょう。

git reset --soft HEAD@{1}

今回はfix_testに戻したいのでHEAD@{1}を指定しました。
するとしっかりと元に戻っているはずです。

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    modified:   app/models/sample.rb

参考記事:https://qiita.com/shosho/items/1f53b1fcf5fd876f309b