クロの制作日記

クロの制作日記

田舎の大学生がUnityとか機械学習関連の制作物をひたすらアップします。ブログで紹介したコード一覧https://github.com/kuroshum/blog_code

0から始めるGitHub入門 第三回 (ローカルリポジトリでの基本的な操作)

前回はリポジトリの作成とコードの公開を行いました。
kurora-shumpei.hatenablog.com

今回からはGitHubというよりはGitの使い方の説明をしていきます。今回はGitの使い方の中でも特に基本中の基本の使い方を紹介していきます。

では 早速始めていきましょう


今回の記事作成する際に参考にした本です。


GitHub実践入門──Pull Requestによる開発の変革 WEB+DB PRESS plus

リポジトリ(ローカル)に変更を反映

リポジトリの初期化 : git init

前回の記事の「リポジトリの作成」でリポジトリを作成するには以下の三つの方法があると紹介しました。

  • リモートリポジトリをコピーして作成(clone)

前回は一番目と三番目の方法でリポジトリを作成しましたが、今回は二番目の方法をリポジトリの初期化をすることで試してみましょう。

何か適当なディレクトリをリポジトリとして初期化しても良いですが、今回は新しくそれ用のディレクトリを作成しましょう。以下のコマンドを端末、またはgit bashに入力してください(#以降はコメントですので入力しないように)。

mkdir GitHub_Tutorial    # ディレクトリを作成
cd GitHub_Tutorial       # 作成したディレクトリに移動
git init                 # リポジトリを初期化

これで「GitHub_Tutorial」ディレクトリはリポジトリとして初期化することができました。

ちゃんと初期化できているかを確認するには

ls -a

というコマンドを入力して、「.git」というディレクトリがあればOKです。

この「.git」というディレクトリには現在のディレクトリ(ここではGitHub_Tutorial)以下を管理するリポジトリデータが格納されています。ですのでこのディレクトリは基本的に弄らないようにしましょう。

ちなみに、Gitでは「.git」ディレクトリ以下をこのリポジトリに付随したワークツリーと呼び、そのワークツリーでファイルの編集を行います。その後、リポジトリに登録することでファイルの歴史を管理します。ファイルを以前の状態に戻したいときは、逆に、リポジトリから以前の状態を取得、そしてワークツリーに展開します。こういった仕組みがあるおかげで、プログラマはバージョン管理をスムーズにすすめることができます。

ただ、こういった内部で動いているものを理解していなくても簡単に操作できるようにGitでは色々な操作コマンドが存在します。

次からはその色々な操作コマンドを説明していきます。




リポジトリの状態を確認 : git status

私はこのコマンドを1日に4,5回入力するくらい軽率に使っています。それほどよく使うコマンドなので覚えておきましょう。

とても重要ですが、コマンドの機能自体は簡単です。とりあえず入力してみましょう。

git status

すると

On branch master

No commits yet

nothing to commit (create/copy files and use "git add" to track)

このように表示されます。まだ何を書いているかわからないと思いますが、このリポジトリの状態を表示しています。

  • 現在のブランチ:マスター
  • コミット状況:なし
  • まだコミットされていません

みたいな感じです。ブランチは次回説明しますので、とりあえず現在はマスターブランチにいるということだけ覚えていてください。

コミットはまた後で詳しく説明しますが、ファイルのその時点での状態をリポジトリに記録することです。今はコミットがまだされていないということなので、何かしらのファイルをコミットしてみましょう。

コミットするファイルとして、リポジトリの説明を記述するREADME.mdファイルを作ってみます。

touch README.md

このコマンドでREADMEファイルを作成できたので、

git status

をしてみると

On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)

	README.md

nothing added to commit but untracked files present (use "git add" to track)

と表示されます。

「Untracked files:」という表記が新しく出てきましたが、これは

「ワーキングツリー上で新しくファイルが作成されたけどリポジトリにはまだ登録されてませんよ」

ということを示しています。

じゃあ早速コミットしてみよう!!としたい所ですが、その前にすることがあります。

ステージ領域へファイルを追加 : git add

上で少し説明しましたが、Gitの内部は思っていたよりは複雑で、リポジトリを使ってバージョン管理をするためには以下のような段階を踏む必要があります。

f:id:kurora-shumpei:20190217222538p:plain
コミットまでの流れ

なので、コミットしてリポジトリにファイルを追加するためには、ステージ領域という場所にファイルを追加する必要があります。

以下のコマンドを入力しましょう。

git add README.md

そして

git status

で状態を調べてみると

On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

	new file:   README.md

表記が少し変わりましたね。

これでREADME.mdファイルがステージ領域に追加されました。

リポジトリの状態を記録 : git commit

ステージ領域に追加することができたので、次はついにコミットをしてみましょう。コミットをすると、そのコミットしたファイルやディレクトリの状態をリポジトリに記録することができます。このように記録をすることで、ファイルを前のバージョンに戻したりすることができるようになります。

コミットメッセージ

以下のコマンドを入力してみましょう。

git commit -m "First Commit"

これでステージ領域にあるファイルをリポジトリに追加することができました。

「-m」 以降の" "で囲まれている箇所はコミットメッセージといって、どのような内容をコミットしたかを記述します。今回は何でも良かったので、入門サイトや本でよく書かれている「First Commit」をコミットメッセージとして登録しました。

では現在の状態を調べてみましょう

git status

そして

On branch master
nothing to commit, working tree clean

のように表示されたらOKです。

一応説明しておくと、今までの作業は全てローカルリポジトリ上で行っていたので、GitHubには全く影響していません。このローカルリポジトリをリモートリポジトリに登録するにはまたもうひとつ作業が必要なのですが、それを行うにはブランチを説明しなければならないので、それらは次回で行います。

便利なコマンド

とりあえずローカルリポジトリ上でのコミットまでの作業は一段落したので、補助的なコマンドを説明していきます。

ログを確認 : git log

「git log」では、リポジトリに誰がいつコミット・マージをして、どんな差分があるのかを確認することができます。また、コミットメッセージを確認することもできます。

以下のコマンドを入力しましょう

git log

そうすると、

commit 470985f3bc132ea144ee8dfa3eb77ec52c732986 (HEAD -> master)
Author: kuroshum <kurora.shumpei@g.wakayama-u.jp>
Date:   Sun Feb 17 23:08:45 2019 +0900

    First commit

と表示されます。
今回表示されたのはコミット内容(ハッシュ値)と誰がいつコミットしたか、そしてそのときのメッセージですね。

また、以下のようにコマンドの後ろにファイル名を書くと、

git log README.md

そのファイルだけのログを確認することができます。

また、「-p」をつけると、ファイルの差分を確認したりもできます。このように色々なオプションが存在するので、気になる人は確認してみてください。

変更差分を確認 : git diff

「git diff」ではワークツリー・ステージ領域・最新コミット間の差分を確認することできます。

ワーキングツリーとステージ領域の差分を確認

以下のコマンドを入力しましょう

git diff

おそらく何も表示されないかと思います。

理由は単純明快でこのファイルにはまだ何も中身が記述されていないからです。「git diff」は差分を表示するコマンドですので、まだ変更をしてない場合は何も表示されません。

なので、README.mdに適当に変更を加えましょう。

以下の文をREADME.mdに記入しましょう

#0から始めるGitHub

そして、「git diff」をしてみてください。

以下のように表示されるはずです。

diff --git a/README.md b/README.md
index e69de29..8f6a1f5 100644
--- a/README.md
+++ b/README.md
@@ -0,0 +1 @@
+#0から始めるGitHub

何かよくわからないけど差分が表示されてる感じがします。

この表示の内容は、「git add」でステージ領域に追加していないので、先ほどコミットした内容との差分が表示されています。また、最後の行の「+」と表記されている行が追加したものです。

ワーキングツリーと最新コミットの差分を確認

とりあえず変更をステージ領域に追加しましょう

git add README.md

この状態で「git diff」してもまた何も表示されません。これは「git add」によりワーキングツリーとステージ領域が同じ状態になったからです。

ここで、最新コミットとの差分を確認するためには以下のコマンドを入力しましょう。

git diff HEAD

すると

diff --git a/README.md b/README.md
index e69de29..8f6a1f5 100644
--- a/README.md
+++ b/README.md
@@ -0,0 +1 @@
+#0から始めるGitHub

差分が表示されましたね。

このように、「git diff HEAD」を実行して、どのような変更をしたのかを確認してから、コミットをするようにしましょう。もし間違った変更をしたファイルをコミットするとエライコッチャになりますからね。

差分が確認できたので、コミットしましょう。

git commit -m "Add Index"

最後に、ちゃんとコミットできたかを確認してみましょう。

そういうときは「git log」を使うんでしたね

git log

すると

commit 0ca4d4160c96deac051a4b144aa294fc7a215696 (HEAD -> master)
Author: kuroshum <kurora.shumpei@g.wakayama-u.jp>
Date:   Mon Feb 18 14:57:15 2019 +0900

    Add Index

commit 470985f3bc132ea144ee8dfa3eb77ec52c732986
Author: kuroshum <kurora.shumpei@g.wakayama-u.jp>
Date:   Sun Feb 17 23:08:45 2019 +0900

    First commit

このように表示されたら完了です。




最後に

これで、ローカルリポジトリにコミットするための基本的な操作をすることができました。

次回は、ブランチという機能についての説明をしていきます。

今回の記事作成する際に参考にした本です。


GitHub実践入門──Pull Requestによる開発の変革 WEB+DB PRESS plus

次回
kurora-shumpei.hatenablog.com