またやってしまった。Git 難しいー
今学習の一環としてRailsでアプリを作っていて、機能を追加するにあたりブランチを切って作業しているつもりが master のままで、masterブランチにコミットしてしまった。
$ git reset --hard
で作業ツリーをコミットと同じ状態にして、$ git reset --soft HEAD^
で HEAD を1つ前のコミットに戻してstash
??とかいろいろ考えたが、ちょうど申し込んでいた勉強会(オンライン)の時間になったので、プロの方に相談させてもらった。多分すごい強い方なのにこんな質問して申し訳ない。。。とてもわかりやすく教えていただいた。Rubyコミュニティは初心者に優しくてほんとにありがたい。
やるべきことを整理
# 今の状態:間違ってmasterブランチにコミットした master A - B - C - D (masterの先端) # この状態にしたい master A - B - C (masterの先端) \ develop D (developの先端)
つまり、やるべきことは次の3つ。
- master 先端コミットの1個前(
HEAD^
)からブランチを生やす - master 先端のコミット(
master
)を新しいブランチの先端にくっつける(cherry-pick
) - master 先端のコミットを削除
手順
# masterブランチに移動 $ git checkout master # HEAD^ から新しいブランチ(develop)を生やしてそのブランチに移動 $ git checkout -b develop HEAD^ # masterブランチ先端のコミットをくっつける $ git cherry-pick master # masterブランチの先端のコミットを削除 $ git checkout master $ git reset --hard HEAD^
これでOK。チェリーピックなのでコミットのハッシュは変わる。
Gitは何度も失敗して覚えていくしかないのかもしれない。