俺がgithubを使うにあたってgitを理解しようとした話3
そもそもなんでgitを理解せねば、というかこんなトラブルをことが起きてしまったのか、というお話。
何をしようとしていたか
https://github.com/smlsharp/smlsharp:githubのSML#レポジトリ]のバージョンが1.1.0だったので1.2.0と2.0.0にアップデートしようとしてました。 |
何をやらかしたか
バージョン1.2.0のアップデートは素直にいき、githubへ反映できました。
しかしその次が問題。
間違えて2.0.0の変更を1.1.0にかけてしまい、手元のmasterがリモートのmaster(oring/master)と別ブランチ状態に。
詳細は、いらないファイルを消し忘れたり、README.mdを消してしまったりをして、何度かやり直してパニックになっているうちに、こんな間違ったpush状態に陥っていました。
解決法
解決方法はいろいろありますが、今回は手元のmasterをresetしてv1.2.0に指し直してから、2.0.0をコミットしました。*1
図とコマンドは下記。
ちなみにこの時の自分ではどうしていいかわからずに*2、mzpさんとbleisさんにご指導を仰ぎました。
結果としてgitについていろいろ知ることになりました。
$ git reset --hard v1.2.0 # masterのHEADとファイル内容をv1.2.0へセット
反省
- gitはコマンドのコピペじゃなくて中身を理解してつかう
- たいていは痛い目を見てから覚える
- git reset --hardはファイル内容も書き換えるので慎重に
- rebase -iでHEADが指してるコミットは消せないっぽい
- gitのコミットはrebase等で消しても見えなくなるだけで、タグ・ブランチなどで差されていないとそのうちGCされて本当に消えるらしい