はじめに
git
を使う最大の利点は、バージョン(履歴のようなもの)管理することによって、(コミットした)過去のどこへでも戻ることができることではないでしょうか?
この仕組みがあることで、安心して開発を進めることができますよね。
そこで、タイムマシーンに乗って、過去にタイムトラベルするスーパー安全な方法をスーパーシンプルにまとめます。
注:この記事は、MacのTime machine とは一切関係ありません。
3ステップ
git
で過去の状態に戻りたい場面には主に次の二つがあると思います。
- プログラムに不具合が出たため、過去のある状態に戻ってリスタートしたい
- ただ単に過去のある状態を確認するためだけに戻りたい(確認後、現在の状態に戻ってくる)
1 の場合は、git reset --hard
で乱暴に戻っても問題ないですが、2 の場合は、それでは少々乱暴(危険)なので、違うコマンドを使うことでかなり安全に作業できます。この記事では、2 の、単に確認のために過去に戻りたい場合の対処法を示します。
前提として、過去へ戻る前は、masterブランチにいるとします。
1. コミット履歴を確認する
git reflog
を使うと、HEAD
の移動履歴を確認できます。git log
では、commit履歴のみ表示しますが、git flog
では、commitに加えて、checkout、pull、reset、rebaseなどの履歴(つまりは、HEADの移動履歴)も表示することができます。
❯ git reflog
.
.
8827928 (origin/develop) HEAD@{43}: pull origin master: Fast-forward
8281683 HEAD@{44}: checkout: moving from master to develop
306e3db HEAD@{45}: pull origin master: Fast-forward
3369a69 HEAD@{46}: commit: fix typo
f00081c HEAD@{47}: commit: create README.md
9c898f1 HEAD@{48}: commit: third commit
d2fafdb HEAD@{49}: commit: second commit
eddfbf5 HEAD@{50}: commit: fist commit
2. 目的の移動ポイントを指定してgo back!
では、移動したい箇所(ハッシュ値)を指定して、過去に戻りましょう。
下記のようにgit checkout ハッシュ値
、あるいは、git checkout HEAD@{46}
のようにHEADを指定すると、過去にgo back! することができます。
❯ git checkout 3369a69
3. 確認が済んだら現在にgo back!
masterプランチに戻りましょう。
❯ git checkout master
おわり。