さて、gitの学習の時間です。今では毎日暇さえあればgitしてます。なんか気持ちいいんですよね。でも、せっかくgitを使っているのにコミットするばかりで、あまり過去の履歴を見たり過去に戻ったりしていません。
これからちょっと、過去に戻ったり、現在に戻ってきたりやってみようと思います。ネットで探したらよい記事がたくさん!
まずは、Git初心者が絶対に覚えておくべきコマンドを参考に学習していきます!
git –amend
直前のコミットを修正
git --amend
で直前のコミットの内容を修正!できました!良い感じです。ちなみに、やり方としては、git commit -m "t.txtを変更しまshia"
とか変なコミット文を打ってしまったときは、
git --amend -m "t.txtを変更しました。"
とやれば直前のコミット文が上書きされます。またコード上でも、例えばNSString *widht;
とかやっちゃっているときに、コードを修正して、git add .
して、
git --amend -m "適当なコミット文"
をすれば、直近のコミットが上書きされます。どっかの時点に戻ってしまうということもありません。これは便利!僕の場合、ついコミットしてしまってコミット後に動かしてアプリが落ちるので微修正して再度コミットということがちょくちょくあるので便利に使えそうです。
git reset
指定位置まで戻る
先ほどのコミットが終わったあと、logを出し、一応最新のSHAをメモってから、
git reset HEAD^
とやってみました。すると最後のコミットをしていない状態に戻りました。git log
で確認してみると、最後のコミットの情報が表示されません。ただ単にコミット前に戻っただけで、ソースは何も変わっていませんでした。git resetはHEADの位置を変更することが出来るようです。^
はどのくらい前に戻るかということなんでしょうかね。うほ。HEADのいちを移動できるということは、新たにコミットしなければさっきの状態に戻れるかなと思い、以下のコマンドを実行してみました。
git reset e66e5…(先ほどメモしたSHA)
すると、最新の状態に戻りました!git status
とやっても変更点はないとメッセージが出るだけです。git log
を確認して、2つ前に戻ってみました
git reset ga1rg…(2つ前のSHA)
戻りました。というか、コードは全く変わってないのですが、2つ前より後にcommitしたものは、すべて未commitの状態に戻りました。この状態から最新の状態にも戻れました。更にもう一度2つ前の状態に戻って、
git checkoutの使い方を参考に、修正されているファイルを修正前の状態に戻します。
git checkout t.txt
git status
で見たところ、変更点はないというメッセージのみになりました。そして、この状態でちょっと変更を加えてコミット。更に、先ほどの最新の状態のSHAへgit reset e66e5…(先ほどメモしたSHA)
で戻って見ることにしました。
ここで少々ややこしいことになりました。2つ前に戻って変更した部分が未コミットのadd候補、そしてe66e5…にはあるが2つ前に戻って変更したファイルにない部分がrm候補の未コミット状態で復活しました。とりあえず、ファイル自体は2つ前に戻って変更したものと変わらないようです。
ふむふむ。
そして最後に紹介されているのが、
git reflog
HEADの変更の経緯を見ることができる
ずらっと出てきた。
c7d36af HEAD@{0}: reset: moving to c7d36af...
57a61a6 HEAD@{1}: commit: この状態の変更は?って文を追加
e66e588 HEAD@{2}: reset: moving to HEAD^
c7d36af HEAD@{3}: reset: moving to c7d36af...
0887fdb HEAD@{4}: reset: moving to 0887fdb...
c7d36af HEAD@{5}: reset: moving to c7d36af...
e66e588 HEAD@{6}: reset: moving to HEAD^
c7d36af HEAD@{7}: commit: -追加
e66e588 HEAD@{8}: commit (amend): コミット文を変更
6727c21 HEAD@{9}: commit (amend): 3
e130159 HEAD@{10}: commit: 3
0887fdb HEAD@{11}: commit: 更に文を追加
8d426c4 HEAD@{12}: commit: 文を追加
3c20bd5 HEAD@{13}: commit (initial): initial commit
ウホ、良い感じ。上記の”…”の部分は、伏せているだけで実際はちゃんとSHAが出てきます。これで、自分が作業してきたHEADの戻りたい部分に戻れるわけですね!
いや、このブログ分量も適切で説明もわかり易くほんとうに勉強になりました!