gitでの基本操作を学習しよう。
はじめてのコミット
[フォルダ作成]
作業フォルダを作成しよう。今回はdesktopにgit_basicフォルダを作成し、そこに移動する。
$ mkdir ~/desktop/git_basic $ cd ~/desktop/git_basic
一番最初にやることはgit initだ。これでgitの管理下に置かれる
$ git init
なにかしたらすぐにgit statusで確認するクセをつけるとよいだろう
$ git status
今はまだcommitオブジェクトが存在していないので
nothing to commit
と表示される。
さっそくファイルを1枚作ってみよう。今回はtest.txtを作成する。
$ vi test.txt
vimが開くので以下のように1行入力して:wqする。
first_line
git statusしてみよう。
$ git status On branch master No commits yet Untracked files: (use "git add <file>..." to include in what will be committed) test.txt nothing added to commit but untracked files present (use "git add" to track)
作業フォルダの変更を検知してメッセージが表示されている。
test.txt
という知らないファイルが存在している。
というメッセージだ。
gitで履歴を作っていくにはまずステージングエリアと呼ばれるところに変更したい情報をaddしなければならない。
さっそく今作ったtest.txtをaddしよう。
$ git add test.txt
なにかしたらgit status
$ git status On branch master No commits yet Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: test.txt
test.txtファイルがステージングエリアにあがってコミットできる状態になっている。コミットしてみよう。
$ git commit -m"first commit" [master (root-commit) 27fae62] first commit 1 file changed, 1 insertion(+) create mode 100644 test.txt
gitはコミットする際に必ずどういう変更をしたのかということを記すコミットメッセージというのを付与しなければならない。
git commit -m
と-mオプションをつけてコミットすることでcommitと同時にメッセージを付与することができる。今回は”first commit”というコミットメッセージを付与した。
コミットオブジェクトができたのでgit graphしてみよう。
(git graph はgit log –graphを短いコマンドで実行できるようにgit講座の初回に設定してある)
$ git graph * 27fae62 (HEAD -> master) 2020-01-21 mjpurin first commit
左に27fae62というこのコミットオブジェクトのハッシュ値が表示されている。
このハッシュ値はコミット識別するのに使われる。
2度目のコミット
test.txtを変更しよう。viにて2行目を追加して以下の状態にする。
first_line second_line
git statusで確認
$ git status Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) modified: test.txt
作業フォルダに変更があったことをgitが感知している。今回は差分を確認してみよう。
$ git diff diff --git a/test.txt b/test.txt index c380edd..efac604 100644 --- a/test.txt +++ b/test.txt @@ -1 +1,2 @@ first_line +second_line
この状態でのdiffコマンドは最初のコミットと現在の作業フォルダの差分を表示してくれている。(+記号は新しく加わった行を意味している。)
変更内容も確認したのでaddしよう。
$ git add .
先程はgit addの後ろにファイル名を書いたが.記号を使うとそのフォルダで行われた変更全部をステージングエリアに上げることを意味する。とても便利なコマンドなので多用される。statusをみよう。
$ git status On branch master Changes to be committed: (use "git restore --staged <file>..." to unstage) modified: test.txt
test.txtの変更を含んだコミットを作成できる状態という表示されている。
ここで先程のgit diffをしてみよう。
$ git diff
しかし、何も表示されない。addしたあとのdiffコマンドはステージングエリアと作業フォルダの差分を表示する。最新コミットとの変更を知りたい場合は以下のように入力する。
$ git diff HEAD
HEADというのは今作業しているブランチの最新のコミットオブジェクトを指すポインターでGitではかなり重要な意味を持つ言葉だ。
差分も確認したのでcommitしよう。
$ git commit -m"second commit"
コミットしたらgit graphだ。
$ git graph * 5cc2965 (HEAD -> master) 2020-01-21 mjpurin second commit * 27fae62 2020-01-21 mjpurin first commit
2つ目のコミットオブジェクトが作成された。
同じようにtest.txtにthird_lineを追記して3つ目のコミットオブジェクトを作成してみてもらいたい。(実際に自分で作業する)
できたであろうか?git graphすると以下のような感じなるはずだ。
$ git graph * 266f605 (HEAD -> master) 2020-01-21 mjpurin third commit * 5cc2965 2020-01-21 mjpurin second commit * 27fae62 2020-01-21 mjpurin first commit
昔に戻りたい・・・
あのときに戻りたい。。。実際の人生ではできないがgitを使っていれば簡単に戻れる。まずは完全にそのときに状態にもどす方法をやろう。
$ git reset --hard 27fae
作業フォルダも履歴も完全に1時間前に戻った。完全にリセットしてやり直したい場合にはよい方法だ。
もちろん復元する手段も提供されている。以下のように入力
$ git reflog 27fae62 (HEAD -> master) HEAD@{0}: reset: moving to 27fae 266f605 HEAD@{1}: commit: third commit 5cc2965 HEAD@{2}: commit: second commit 27fae62 (HEAD -> master) HEAD@{3}: commit (initial): first commit
reflogはリファレンスログで過去に行ったコミットオブジェクトを参照できる。
third commitしたオブジェクト(266f)に再びreset –hardして復元しよう。
$ git reset --hard 266f HEAD is now at 266f605 third commit
git graphで確認
$ git graph * 266f605 (HEAD -> master) 2020-01-21 mjpurin third commit * 5cc2965 2020-01-21 mjpurin second commit * 27fae62 2020-01-21 mjpurin first commit
third commitをした直後の状態に復元された。
コメント