GITの1番のおんけいは「何とかなるという安心感」

GITを使い始めてしばらく経ちました。ようやく使い方にも慣れ、機能ごとにブランチを分ける、ブランチ間でマージしたりリベースしたりする、コミットの歴史をキレイにしてプッシュする、なんて言う事も問題なくできるようになりました。業務上GITの操作で問題が起きることがなくなったので、それなりに使い方は上達したかと思います。

んで、僕がGITを使ってて1番良かったと思うのは「失敗してもローカルにあるうちは何とでもなるか…という安心感」です。
たとえソースコード全部吹っ飛ばしたり、リベース失敗して更新が消えたり、マージした時に余計なコミットが入り込んだりしても、それがローカルリポジトリで操作しているうちはなんとかなります。(テンパってリモートに反映させた場合は知らん。素直に謝りましょう。)

これが可能になるのが、reflogresetの連携です。
git reflogを使うと「ローカルでの操作の履歴」が取得できます。で、それぞれの操作にはHEAD@{0}みたいに番号が割り振られています。
reflogで戻りたい場所を見つけたら、git reset --hard HEAD@{0}なんて具合にしてやると、ローカルリポジトリがその操作をした時点の状態に戻ります。(resetのオプションに関しては適材適所でおなシャス!)
ね、簡単でしょ?

ただし、これができるのはローカルにいる間のみなので、リモートにプッシュしちゃったら素直に諦めましょう。