LoginSignup
2
1

More than 3 years have passed since last update.

【git】Time machineに乗って過去にどこでも go back!

Posted at

はじめに

gitを使う最大の利点は、バージョン(履歴のようなもの)管理することによって、(コミットした)過去のどこへでも戻ることができることではないでしょうか?
この仕組みがあることで、安心して開発を進めることができますよね。

そこで、タイムマシーンに乗って、過去にタイムトラベルするスーパー安全な方法をスーパーシンプルにまとめます。

注:この記事は、MacのTime machine とは一切関係ありません。

3ステップ

gitで過去の状態に戻りたい場面には主に次の二つがあると思います。

  1. プログラムに不具合が出たため、過去のある状態に戻ってリスタートしたい
  2. ただ単に過去のある状態を確認するためだけに戻りたい(確認後、現在の状態に戻ってくる)

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

おわり。

2
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
2
1