読者です 読者をやめる 読者になる 読者になる

c-bata web

@c_bata_ のメモ。python多め

git勉強内容まとめ6(過去のバージョンに戻る)

今まではgitにひたすらコミットしていく方法を勉強していきましたが,今日はいよいよ過去のバージョンに戻る方法を勉強します。


過去のバージョンに戻す

まず↓に示すように,2つのコミットがあったとします。

$ git log
commit dbca148e010b3c4b5bd7854eb0f55193c12649a4
Author: 名前 <メールアドレス>
Date:   Wed Sep 11 00:37:52 2013 +0900

    line2を追加

commit 8610778d6a86b321a1e67faa5f34f104df565a1a
Author: 名前 <メールアドレス>
Date:   Wed Sep 4 23:08:51 2013 +0900

    initial commit

ここで,さらにソースコードに色々な変更をし,git add .などを入力したものの,過去のバージョンである「line2を追加」のところまで戻るためには,↓に示すコマンドを入力することで可能です。

$ git reset --hard コミットID(dbca148e010b3c4b5bd7854eb0f55193c12649a4)

ちなみに,hardオプションは現在の作業ディレクトリもステージングエリアも元の状態に戻すためのものです。
なお,コミットIDは一意にさえ決まればいいので,適当な桁数(最低7桁と言われているそうです)を入力すれば構いません。


もっと簡単な戻り方

↑に示した方法では,コミットIDをコピペで貼り付けなければなりません。 これはとても面倒なので,直前のコミットや2つ前のコミットに戻るときには,↓のようにすればOKです

※1つ前のコミットに戻るとき
$ git reset --hard HEAD
※2つ前のコミットに戻るとき
$ git reset --hard HEAD^

HEADというのは,最新のコミットを示しており,"^"をHEADの後ろに追加するとHEADの更に前のコミット(initial commit)に戻ることが可能です。


一度戻ったけど,やっぱり1つ先のコミットに戻る方法

一度「initial commit」に戻ったものの,やっぱり「line2を追加」に戻りたいという時には↓に示すコマンドで可能です。

$ git reset --head ORIG_HEAD

gitでは,前回取り消された内容がORIG_HEADというものに1つだけ格納されています。
そのためそれを復元することで,自由に履歴を変更することが可能です。 実行例を下に示します。

$ git log
commit 8610778d6a86b321a1e67faa5f34f104df565a1a
Author: 名前 <メールアドレス>
Date:   Wed Sep 4 23:08:51 2013 +0900

    initial commit
$ git reset --head ORIG_HEAD
$ git log
commit dbca148e010b3c4b5bd7854eb0f55193c12649a4
Author: 名前 <メールアドレス>
Date:   Wed Sep 11 00:37:52 2013 +0900

    line2を追加

commit 8610778d6a86b321a1e67faa5f34f104df565a1a
Author: 名前 <メールアドレス>
Date:   Wed Sep 4 23:08:51 2013 +0900

    initial commit

ただし,resetのオプション(ここではheadオプションを使用)の内容によっては作業ディレクトリやステージングエリアの情報が失われる場合があるので、気をつけなければならないようです。
とりあえず基本的には毎回headオプションをつけるのがいいかもしれません。


スターをくださった方ありがとうございます。
今回の内容で,実際にgitを扱う事が出来るぐらいの勉強はしてきたかと思うので,おそらく次回が最終回となります。
次回は,複数のバージョンを管理するための「ブランチ」というものを勉強していきます。

複数の人々と,一緒に開発していくとなるとソースコードの変更が他の人とつじつまが合わなくなってしまうので,そのような場合の対処方法などを勉強していく必要があるようなのですが,今回は1人で開発するときを想定してgitの勉強をしてきたので,おそらく次回のブランチが最終回です。 それが終われば今までの勉強内容を見返し,gitのコマンドの早見表のようなものを作りたいと思っているので,よければご活用ください。


参考ページ ドットインストールgit入門