##発生した状況と手順
開発中、同じブランチの以前の状態に戻りたくなり
git reflog
→git checkout <commit id>
で過去の状態に戻った
↓
エラーメッセージっぽいものが出ていたけど、無視してそのまま10回くらいcommitを重ねた
↓
GitHubにPushができなくなってしまった
##detached HEADとは
現在の地点が、ブランチから切り離されてしまっている状態。
ターミナルのプロンプトに現在のブランチ名を表示させているのですが、気がつくとブランチ名ではなくd8d36db9f649a163b097
のようなSHA1が表示されちゃってました。
##何がまずいのか
どのブランチにも属していないので、PUSHができません。
あと、うまいことやらないと行った変更が全て消えてしまいます。
##うまくいった対処法
新規ブランチを作成し、
$ git branch tmp
元いたブランチに移動し、
$ git checkout create-header
作成したブランチを取り込む
$ git merge tmp
コミット履歴に、マージをした記録が残ってしまいますが、個人的にはオッケーです。
無事解決できてよかった。
##うまくいかなかった対処法
現在のブランチのSHA1を取得
$ git rev-parse HEAD
d8d36db9f649a163b097
SHA1からブランチを取得
$ git name-rev d8d36db9f649a163b097
d8d36db9f649a163b097 master
現在master
ブランチが指すコミットにいることがわかったので、移動
$ git checkout master
私の場合git name-rev d8d36db9f649a163b097
をしてもブランチ名が取得できなかったので、この方法ではうまく行きませんでした。
過去のコミットに戻る、という動作をした場合、この方法は使えないのかもしれません。
逆にdetached HEADになった直後はこの方法で修正できそうです。
##今後に向けて
過去のバージョンに戻りたい時には、git checkout <commit ID>
ではなくgit reset --hard [commit id]
を使う!
##参考
gitのHEADがブランチから外れてしまう現象とその直し方
detached HEAD から脱出する方法を git の内部構造から探る