時を戻そう 『 git checkout 』
前回までで、コミットとその履歴の確認の方法まで紹介しましたね。
今回は、過去にコミットした時点の状態に戻す方法を紹介します。
記録はとっておくだけでなく、活用しないと意味ないですからね~
変更の履歴を追えるだけでなく、『 必要な時に任意の時点に戻せる 』これが Git の良いところです🎵
まずは下準備
もう一つくらいはコミットがないと例を出しづらいので、コミットを一つ増やしました。
具体的には、2行目に 「 def 」 と追記して保存しました。
過去に戻す
さあいよいよ本題です。
まだ 「 def 」 が追記されていないコミットの状態に戻してみます。
下の図のように「 History 」というところをクリック(選択)して、一つ前のコミットメッセージ "1行目に「abc」と入力" を右クリックします。すると色々でてきますが、『チェックアウト』を押してください。
何やら確認が入りますが、とりあえず今(今回)は気にしなくて大丈夫です。
そのまま「OK」ボタンをクリックします。
すると"1行目に「abc」と入力"のところに、『 HEAD 』という文字が現れました。これで問題ないです。
『 HEAD 』 とは、今自分がいる(作業している)場所を指し示すもの(ポインタ)です。
作業ツリーという領域の状態が切り替わったわけです。
コマンド操作の場合 ~過去に戻す~
「 git checkout 」 コマンドを使用します。
もうちょっと補足すると、下記のように 「 git checkout ハッシュ値 」 と入力します。
こうすることで、HEAD をここで指定したコミットに移動させます。
補足
『 ハッシュ値 』 とは、それぞれのコミットを表す一意の16進数の値です。
今回の場合は、「 fd4b030beac0815c0ca03fdd3c6ce9103b6ef200 」です。
🔻 「 git log 」で過去のコミットとハッシュ値を確認
mevius@SurfaceLaptop MINGW64 ~/Documents/Gitdemo (master)
$ git log
commit b5a1e576b6f424b6b85f667a178b513e46438a66 (HEAD -> master)
Author: mevius <mevius@sample.local>
Date: Sat Jan 16 15:08:21 2021 +0900
2行目に「def」と追記
commit fd4b030beac0815c0ca03fdd3c6ce9103b6ef200 👈今回の対象のハッシュ値
Author: mevius <mevius@sample.local>
Date: Thu Jan 14 16:20:48 2021 +0900
1行目に「abc」と入力
commit 68ad5472cf0e6910f7ecfbae1c0031f35029f5d8
Author: mevius <mevius@sample.local>
Date: Wed Jan 13 14:54:01 2021 +0900
first commit
🔻 戻したい状態のハッシュ値を使って「 git checkout 」
mevius@SurfaceLaptop MINGW64 ~/Documents/Gitdemo (master)
$ git checkout fd4b030beac0815c0ca03fdd3c6ce9103b6ef200
Note: switching to 'fd4b030beac0815c0ca03fdd3c6ce9103b6ef200'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:
git switch -c <new-branch-name>
Or undo this operation with:
git switch -
Turn off this advice by setting config variable advice.detachedHead to false
HEAD is now at fd4b030 1行目に「abc」と入力 👈HEADが移動した
mevius@SurfaceLaptop MINGW64 ~/Documents/Gitdemo ((fd4b030...)) 👈表示が変わった
$
mevius@SurfaceLaptop MINGW64 ~/Documents/Gitdemo ((fd4b030...))
$ git status
HEAD detached at fd4b030
nothing to commit, working tree clean
実はハッシュ値をすべて記述しなくても大丈夫なのですが、ハッシュ値をダブルクリックすると下の図のようにすべて選択できてしまうので、これを丸ごと使ってしまいましょう。
この状態で右クリックして「 Copy 」して
そのあと「 Paste 」で貼り付けてしまいましょう。
ファイルを開いてみる(過去に戻っているか?)
おぉ~2行目に追記したはずの「 def 」 がないですね。当然です時が戻っていますので。
このファイルをコピペなどして例えばデスクトップなど他の場所に持っていくこともできます。これで過去の時点のファイルを取り出すことができましたね。
元に戻す
先ほどの要領で、今度は "2行目に「def」と追記" のところでチェックアウトします。
何やら警告が出ますが、とりあえず今(今回)は気にしなくて大丈夫です。
そのまま「はい」ボタンをクリックします。
これで元(最新の状態)に戻ったはずです。
コマンド操作の場合 ~元に戻す~
「 git checkout master 」 とコマンドを打ってください。これで元通りです。
ちなみに、『 master 』 は以前よりちょこちょこ名前が出てくるブランチというものですが、今はとりあえず気にしなくて大丈夫です。
Switched to branch 'master'
とも書かれていますね。現状では、ブランチは master しかない状態です。
mevius@SurfaceLaptop MINGW64 ~/Documents/Gitdemo ((fd4b030...))
$ git checkout master
Previous HEAD position was fd4b030 1行目に「abc」と入力
Switched to branch 'master'
mevius@SurfaceLaptop MINGW64 ~/Documents/Gitdemo (master) 👈元の表示に戻った
$
軽く補足しておくと、インストールしたときに 『 default branch name 』 を master にしましたので、今はコイツだけがあります。
ファイルを開いてみる(元通りか?)
はい、ちゃんと 「 def 」 と記載されていますね。間違いなく過去から現代に戻ってきました。
今回はここまで 🔚
今回は「 git checkout ハッシュ値 」 を使って HEAD を過去コミット時点に移動させて時を戻してみました。
ちなみに、「 git checkout ブランチ(branch)名」 としてブランチを切り替えるときにも使ったりします。
「 git checkout master 」 は、master 以外のブランチにいる状態から master ブランチに切り替えるときにも使います。
ブランチの話はまた次回以降したいと思います。
最後までお読みいただきありがとうございました 😊
▶ 続けて読むのにおススメな記事
#いま私にできること #これからの仕事術 #IT #パソコン #駆け出しエンジニア #PC #windows #Git #コマンド #非エンジニア #GUI #BASH #Sourcetree #挑戦している君へ
もしこの記事が何かの参考になったもしくは面白かったという方は、応援していただけると大変嬉しいです😊 これからもよろしくお願いします。