Gitを触ってみる（未追跡からコミットまで）

前回
Git（GitHub）の勉強をする。まずGitについて
http://qiita.com/yoshihiro_fof/items/e08fc7cc1e04a30ec67a

#実際にGitを触ってみる
前回、超初歩のGitとはなんぞやを確認。
ここからは実際に触ってみる。

#Gitのインストール
私の環境はWindows7。
前回同様の教本とした【[エンジニアのためのGitの教科書 実践で使える！バージョン管理とチーム開発手法](http://amzn.to/2mT9i1X)】の説明通りにやる。


**と言いたいところだが**

職場の環境や、数ヶ月前に一度ちょっと勉強した時に、ここらへんの事をやってしまった事もあり、割愛。
というか自分でもやったかどうか忘れて覚えていない。

教本によると**msysGit**というのをインストールするようだが、中途半端に自分で環境を用意してしまっているので、ここからは自分の道に走り出す。

現在、分からないながらにも自力で**GitHub**でリポジトリを作ってあり、**SourceTree**というソフトでGUIを持ってそのリポジトリを管理出来る所まではやってある。

あとEclipseでそのプロジェクトをGitプロジェクトとして読み込んである。

この**SourceTree**というソフト上でコンソールからCUIとしてGitを触れるようでもあるので、これを使って練習をしていこうと思う。

>**[msysGit](https://git-for-windows.github.io/)（皆なんて読んでる？）**
>GitをWindows環境で使うソフト。Cygwinというのも同じくWindows上でGitを使えるようにするソフトらしい。
>
>Git BashというWindowsのコマンドプロンプトに似たCUIツールが一緒にインストールされるので、そこからGit操作をする、らしい。

　
>**[GitHub](https://github.com/)（ぎっとはぶ）**
>Gitのリポジトリをホスティングするサービス
>Webサービス。

　
>**[SourceTree](https://www.sourcetreeapp.com/)（そーすつりー）**
>Atlassian社の出しているソフト。
>本来CUIでコマンド操作するGitを、GUIとしてグラフィカルに操作出来るようなソフト

#割愛する項目
- ユーザー名とメールアドレスの設定
- git init（Gitリポジトリを作成する）

ユーザー名とメールアドレスの設定は以前設定済みのため。
Gitリポジトリの作成は、今回GitHubで作成済みのリポジトリを練習用に使うため。

#練習開始：Gitステータスの確認コマンド（$ git status）

`$ git status`
>ワーキングディレクトリの現在のファイルの状態を確認するコマンド

まず、何も変かの無い状態でコマンドを打ってみる。

```php:結果

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working tree clean
```

次に新規にファイルを作ってみる
**ファイル名：**README.md
**内容：**適当

![image](https://qiita-image-store.s3.amazonaws.com/0/169935/694189f6-f826-f3a3-f0ee-de217bc73ec8.png)

※色々ファイルが見えるが、前回テストしたりしたときのファイル。とりあえずコミット済なので変更点としては出てこないはず。

```php

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
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)
```
未追跡状態のファイルの一覧に出てきました。
バージョン管理の対象にされていない（過去に一度もステージング以降に行っていないファイル）状態です。


#ステージングエリアへファイルを追加し、コミット対象にする（git add）
```php

$ git add README.md

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        new file:   README.md

```

**git add <ファイル名> <ファイル名>（複数指定可）**
>ワーキングディレクトリからステージングエリアへ登録される。
>git add . とすると全てのファイルをステージングエリアに登録出来るらしい。

#コミット対象になったファイルを編集する
ステージングエリアに登録したファイルを、コミット前に編集するとこうなる。
README.mdの中身を書き換えてコマンドを実行。

```php
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        new file:   README.md

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   README.md

```

**Changes to be committed:～**
ステージングされているコミット対象の事なので、前回と変わらず。
（コミット対象が増えたり減ったりしていない為）
ようするにステージングエリアの話。

**Changes not staged for commit:～**
ステージングされたあとにそのファイルが編集され、その変更がステージングされていませんよ、という案内だな。
ようするにワーキングディレクトリの話。

#ファイルの変更差分を確認する（$ git diff）
バージョン管理ソフトの醍醐味、差分の確認です。
Gitの場合、前述の**ステージングエリア**と**ワーキングディレクトリ**との差分もそうですが、そのあとコミットした**リポジトリ**とも当然差分の確認が出来ます。

```php
$ git diff README.md

diff --git a/README.md b/README.md
index 4fc2712..4c434c8 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,5 @@
 Hello!! My name is Yoshihiro!
-Thank you!
\ No newline at end of file
+Thank you!
+
+add new Comment!
+this is added before Commit!
\ No ne
```

急に読むのが面倒になってきた感があります。
[-]が付いているのは削除された行
[+]は追加された行
という感じでしょうか。


ちなみにここまでの状態をSourceTreeで見るとこういう状態
![image](https://qiita-image-store.s3.amazonaws.com/0/169935/4b5224ef-153b-202c-59e4-7a42c03860b7.png)

![image](https://qiita-image-store.s3.amazonaws.com/0/169935/2dffe1ea-64bb-1bf6-10ee-69065eb39d15.png)

確かにステージングにいるREADME.mdと作業中のツリーにいるファイルで内容が違います。
なるほど、こういう風になるのね。

#ステージングエリアに登録されたファイルをコミットする（$ git commit）
```php
$ git commit -m "New Commit Test"

[master bec6df8] New Commit Test
 1 file changed, 2 insertions(+)
 create mode 100644 README.md
```
![image](https://qiita-image-store.s3.amazonaws.com/0/169935/26d13ade-042f-8d43-12a9-dacf33f55e17.png)

[-m]で一行のコミットコメントを付けられる。
逆につけない場合は複数行のコミットコメントを付けられる。

やってみた。

```php

$ git add README.md // さっきのステージング後に変更した内容をステージングさせた

$ git commit

// 実際はここの間でテキストファイル編集画面になる。
// 苦手なviとかCUIでの編集画面なので心してかかるべし。

[master 487d8bf] commit comment Test Title
 1 file changed, 4 insertions(+), 1 deletion(-)

```

オプションをつけずにgit commitをした場合のテキストエディタでのお作法があるらしい。
**1行目：**コミットする変更の要約を記述（恐らくコミットのタイトル的な扱い）
**2行目：**空行（なんで？）
**3行目：**変更の詳細等を記載（恐らく実質的なコミットコメント）
こんな感じでやる、と。

そうすると上記の結果になる。
SourceTreeではこうなっている。
![image](https://qiita-image-store.s3.amazonaws.com/0/169935/b152a73b-d902-5238-0bbd-840e07d7b885.png)
ちなみにコメントでdetailのスペルが間違っている気がするが英検三級なので許して欲しい。