通常、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