Follow twitter

Git 過去のコミットを確認する

今回はGitについて、一時的に過去のコミットに戻って
ファイルを確認したい場合について述べたいと思います。

Git logで過去のコミットID(SHA1)を確認する

git log コマンドで戻りたいときのSHA1を確認します。

git log

今いるブランチコミット履歴について直近5つぐらいが表示されます。
オプションで表示数を変更できたりもします。
例えば直近10個分とかにするのであれば -10などオプションをつけます。

git log -10

Git checkout <SHA1> で過去コミットした状態に戻る

戻りたいときのSHA1がわかれば、下記コマンドをいれるとその時のコミット状態に戻ります。

$git checkout <SHA1>

下記の例ですと、master branchにいる状態で、
93d2b97450a7490771e61428a4feb53545c898f2 というコミット時に戻ります。
master を示していたものが、コミットのSHA1を示していることがわかります。

ここで

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

ってGitからのアドバイスがでています。簡単に解説します。

・あなたは今、detached HEAD状態だよ

・色々みたり、実験的なことをするのであればメインのブランチに
 影響を与えないように新しいブランチを切って作業されたほうがいいよ

・新規にブランチを作りたいときはgit switch -c <新しいブランチ名>で作れるよ

・もしくは、このオペレーションを取りやめたいときはgit switch – で戻れるよ

って書かれてます。今回は、git switchで新規ブランチをつくるようにアドバイスが
かかれてますが、switchコマンドは新しいコマンドなのでcheckout -b コマンドでも同じです。

ちなみにdetached HEADはその名の通り、切り離さたHEADという意味です。
HEADはブランチの先頭コミットを指しているという意味で
ブランチ情報をセットでもっています
つまりdetached HEADとは
ブランチから切り離された(ブランチ情報がない)HEADということになります。
よってコミットに直接checkoutするとdetached HEADの状態になります。

Git checkout <branch> もしくは git switch – で元に戻す

もとのmasterブランチに戻りたいときは、ブランチにcheckoutしてやればよいです。
master ブランチに戻りたいときは

$ git checkout master

もしくは、gitが出してきたアドバイス通りswitchコマンドでも戻れます

$git switch -

終わりに

checkoutコマンドは普段ブランチ切り替えによく使われますが、
コミットを指定すれば過去のコミット状態を確認できます。

Have a nice Git life!