1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

detached HEADになった後にめっちゃcommitしてしまった、、

Last updated at Posted at 2019-12-14

##発生した状況と手順
開発中、同じブランチの以前の状態に戻りたくなり
git refloggit 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 の内部構造から探る

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?