基本操作①: コミットを使用した変更履歴の記録

リポジトリの作成(初期化)


それでは早速リポジトリを作成してみましょう。
Gitでバージョン管理をするには最初にリポジトリの初期化をしなければなりません。
インストールした端末を使用して以下のコマンドで初期化してみましょう。
まずはmkdirコマンドでディレクトリを作成して、cd コマンドでディレクトリに移動してから git init コマンドを行います。

$ mkdir hello_git
$ cd hello_git
$ git init

初期化が出来るとディレクトリに .git というディレクトリが作成されます。
この.git ディレクトリの中にローカルリポジトリで管理される情報が格納されていきます。
また、この.gitディレクトリが置いてある場所以下をワークツリーと呼びます。
このワークツリー内でファイルを編集して、リポジトリにその変更を登録していくことで履歴を管理していきます。

リポジトリの状態を確認


git status コマンドを使用することで、現在のリポジトリの状態を確認することが出来ます。
このコマンドでリポジトリの変化を確認しながら作業をしていくことになります。
では早速、git status コマンドを実行してみましょう。

$ git status
On branch master
No commits yet
nothing to commit (create/copy files and use "git add" to track)

実行結果はこのような結果になったと思います。
これは今はmasterというブランチにいること、まだコミットが無いことが表示されています。
コミットとは変更をした内容の記録の事を指します。
なのでコミットが無いということは、まだリポジトリには何も記録されていないということになります。
それではファイルを作成してワークツリーに変更を起こしてみましょう。
ファイルの作成コマンドはtouch <ファイル名>で行います、index.htmlというファイルを作成してみます。
そして再度git status で状態を確認してみましょう。

$ touch index.html
$ git status
On branch master
No commits yet
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        index.html
nothing added to commit but untracked files present (use "git add" to track)

そうすると、untracked files にindex.html があることが確認できます。
これはまだ変更の履歴を追っていないファイルがあるということを指しています。
この様にしてgit status コマンドを使用するとリポジトリとワークツリーの状態が分かります。

ステージへの登録


先ほど index.html は変更履歴の対象外になっていました。
これを管理対象に登録するには git add コマンドを使用します。
git add コマンドを実行するとステージという場所に登録することができます。
ステージとはコミットをする手前の一時的な領域の事です。
では、git add でステージに登録してみましょう。

$ git add .
$ git status
On branch master
No commits yet
Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   index.html

ちなみに git add . の . は全部という意味です。
git add . と実行するとそのディレクトリ以下の全てをステージに登録します。
逆に git add index.html と実行すると、index.html だけを指定して登録することが出来ます。

さて、git status で状態を見てみると、changes to be committed に new file: index.html が追加されました。
これで、リポジトリに履歴を登録する準備ができました。

リポジトリに変更履歴を登録


git commit コマンドを使用すると、ステージに登録されているファイルをリポジトリに登録することができます。
こうしてリポジトリに登録をすることで、ワークツリーの内容を元に戻したりすることが出来るようになります。
では git commit を実行してリポジトリに変更を登録してみましょう。

$ git commit -m "add first file"
[master (root-commit) 39a93ad] add first file
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 index.html

$ git status
On branch master
nothing to commit, working tree clean

git commit のあとについている -m "add first file" はコミットメッセージです。
メッセージを付けておくことで後々履歴を見た時に何の変更であったかをわかりやすくします。

またこの状態で git status を確認してみましょう。
最新の状態であることが確認できると思います。

コミット履歴を確認


さて、ここまでのコミットの履歴を確認してみましょう。
履歴の確認にはgit log コマンドを使用します。

$ git log
commit 39a93adfcfac56c7abcf53b506e100bf406aae53 (HEAD -> master)
Author: rod91 
Date:   Fri Apr 17 22:58:01 2020 +0900
    add first file

このように 誰がいつどんなコミットをしたかというのが表示されます。
この際にコミットメッセージが表示されるので、コミット時に後から見てわかりやすいメッセージを登録することがとても大事になります。

また、-p オプションを付けることで差分も表示することが出来ます。

$ git log -p
commit 39a93adfcfac56c7abcf53b506e100bf406aae53 (HEAD -> master)
Author: rod91 
Date:   Fri Apr 17 22:58:01 2020 +0900
    add first file
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..e69de29

差分の確認


では、次はファイルに変更を加えてみましょう。
先ほど作成した index.html をエディタで開いて1行追加してみましょう。

この1行追加した変更を git diff コマンドで確認してみます。

$ git diff
diff --git a/index.html b/index.html
index e69de29..9d28838 100644
--- a/index.html
+++ b/index.html
@@ -0,0 +1 @@
+<h1>Hello git</h1>
\ No newline at end of file

ワークツリーの内容を変更したことで、最新のコミットからの差分が表示されました。

+<h1>Hello git</h1>の行が1行追加されたということが確認できます。
では git add してから差分を確認してみます。

$ git add .
$ git diff

そうするとステージに変更を追加したので差分が無くなりました。
今度はこれからするコミットの差分を確認してみます。
その場合は最新のコミットを意味する HEAD を指定します。
そうすると最新のコミットと、これからコミットする内容の差分が表示されます

$ git diff HEAD
diff --git a/index.html b/index.html
index e69de29..9d28838 100644
--- a/index.html
+++ b/index.html
@@ -0,0 +1 @@
+<h1>Hello git</h1>
\ No newline at end of file

こうして差分をしっかり確認してからコミットします。
そして git log で履歴を確認してみましょう。

$ git commit -m "add hello git"
[master 51d05e5] add hello git
1 file changed, 1 insertion(+)
$ git log
commit 51d05e5e2d44448913ece6cf35c6de60ab1c982c (HEAD -> master)
Author: rod91 
Date:   Sat Apr 18 00:36:03 2020 +0900
    add hello git
commit 39a93adfcfac56c7abcf53b506e100bf406aae53
Author: rod91 
Date:   Fri Apr 17 22:58:01 2020 +0900
    add first file

履歴に追加されましたね。
これでgitを使用してリポジトリを初期化して、ファイルを追加、そして変更した履歴をリポジトリに登録することが出来ました。

次のレッスンへ