gitの学習ログ branch, checkout、コンフリクトとか

gitを触った時のログ

##1.ブランチ

`git branch`で現在のブランチの状況を表示

```sh:git_branch
~/workspace/git_test (master) $ git branch
#デフォルトではmasterブランチのみが存在している
* master
~/workspace/git_test (master) $ 
```

topic-Aブランチを作成

`git branch ブランチ名` で新規ブランチ作成
`git checkout ブランチ名` で指定したブランチに移動

※ *が付いているブランチが現在居るブランチ

```console:git_checkout
~/workspace/git_test (master) $ git branch topic-A
~/workspace/git_test (master) $ git branch
#topic-Aという名前のブランチができる
* master
  topic-A
~/workspace/git_test (master) $ 
~/workspace/git_test (master) $ git checkout topic-A
Switched to branch 'topic-A'
~/workspace/git_test (topic-A) $ git branch
#ブランチをmasterからtopic-Aに切り替え
  master
* topic-A
~/workspace/git_test (topic-A) $ 
```

**topic-Aブランチでcommitしてみる**

```sh:
#README.mdを編集
~/workspace/git_test (topic-A) $ git status
On branch topic-A
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

no changes added to commit (use "git add" and/or "git commit -a")
~/workspace/git_test (topic-A) $ git add README.md 

#topic-Aに居る状態でcommitする
~/workspace/git_test (topic-A) $ git commit -m "Add topic-A"
[topic-A c09887d] Add topic-A
 1 file changed, 3 insertions(+), 1 deletion(-)
```

**masterに戻ってgit logをしても"Add topic-A"が表示されない**

```console:
 #masterブランチに戻る
~/workspace/git_test (topic-A) $ git checkout master
Switched to branch 'master'
~/workspace/git_test (master) $ git log
commit 6c9cf4109a877f454d3bf187e21f51a5589fd99c (HEAD -> master)
Author: <ユーザー名> <登録emailアドレス>
Date:   Fri Sep 22 13:19:22 2017 +0000

    line7

:...skipping...
commit 6c9cf4109a877f454d3bf187e21f51a5589fd99c (HEAD -> master)
Author: <ユーザー名> <登録emailアドレス>
Date:   Fri Sep 22 13:19:22 2017 +0000

    line7

commit 734045e19a13bb4ee1fca2d4e0a1be597392cb48
Author: <ユーザー名> <登録emailアドレス>
Date:   Fri Sep 22 13:18:16 2017 +0000

    line5

commit aa80522596c9ef472f15a818adda502f2537a3ff
Author: <ユーザー名> <登録emailアドレス>
Date:   Fri Sep 22 13:17:30 2017 +0000

    line3

commit 7c8ba2c8a05f996ca33a26b176ba6d2ff00dcd53
Author: <ユーザー名> <登録emailアドレス>
Date:   Fri Sep 22 13:15:28 2017 +0000

    add consol log which is I wrote today

commit 0ccf01d20dd8526ffd8d400c07956e7f45febae4
Author: <ユーザー名> <登録emailアドレス>
Date:   Fri Sep 22 13:00:50 2017 +0000
	
	#"Add topic-A"が表示されない。つまり、masterには存在しない
    my fiirst commit
~
~
~
```

<br>
**topic-Aブランチでlogを確認すると、ちゃんと"Add topic-A"が表示されている**

```console:topic-Aでlogを確認
~/workspace/git_test (master) $ git branch
* master
  topic-A
~/workspace/git_test (master) $ git checkout topic-A
Switched to branch 'topic-A'
~/workspace/git_test (topic-A) $ git log 
commit c09887df1efe8ef4315657a83fa4aeda3496c14c (HEAD -> topic-A)
Author: <ユーザー名> <登録emailアドレス>
Date:   Fri Sep 22 13:54:04 2017 +0000

    Add topic-A

commit 6c9cf4109a877f454d3bf187e21f51a5589fd99c (master)
Author: <ユーザー名> <登録emailアドレス>
Date:   Fri Sep 22 13:19:22 2017 +0000

    line7

commit 734045e19a13bb4ee1fca2d4e0a1be597392cb48
Author: <ユーザー名> <登録emailアドレス>
Date:   Fri Sep 22 13:18:16 2017 +0000

    line5

commit aa80522596c9ef472f15a818adda502f2537a3ff
Author: <ユーザー名> <登録emailアドレス>
Date:   Fri Sep 22 13:17:30 2017 +0000

    line3

commit 7c8ba2c8a05f996ca33a26b176ba6d2ff00dcd53
Author: <ユーザー名> <登録emailアドレス>
Date:   Fri Sep 22 13:15:28 2017 +0000

    add consol log which is I wrote today

commit 0ccf01d20dd8526ffd8d400c07956e7f45febae4
Author: <ユーザー名> <登録emailアドレス>
Date:   Fri Sep 22 13:00:50 2017 +0000

    my fiirst commit
~/workspace/git_test (topic-A) $ 
```
<br>

##2.マージ
マージすることで、ブランチの内容をmasterに取り込むことができます

`git checkout master`でmasterブランチに移り、
`git merge ブランチ名` でmasterに内容を取り込む

```console:git_merge
~/workspace/git_test (master) $ git branch
#現在はmasterブランチに居ることを確認
* master
  topic-A
#topic-Aの内容を現在居るブランチにマージ
~/workspace/git_test (master) $ git merge topic-A
Updating 6c9cf41..c09887d
Fast-forward
 README.md | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
~/workspace/git_test (master) $ 

```

git log --でログの視覚情報を増やしてを処理内容を確認


```console:git_log_--
~/workspace/git_test (master) $ git log --
* commit c09887df1efe8ef4315657a83fa4aeda3496c14c (HEAD -> master, topic-A)
| Author: <ユーザー名> <登録emailアドレス>
| Date:   Fri Sep 22 13:54:04 2017 +0000
| 
|     Add topic-A
| 
* commit 6c9cf4109a877f454d3bf187e21f51a5589fd99c
| Author: <ユーザー名> <登録emailアドレス>
| Date:   Fri Sep 22 13:19:22 2017 +0000
| 
|     line7
| 
* commit 734045e19a13bb4ee1fca2d4e0a1be597392cb48
| Author: <ユーザー名> <登録emailアドレス>
| Date:   Fri Sep 22 13:18:16 2017 +0000
| 
|     line5
| 
* commit aa80522596c9ef472f15a818adda502f2537a3ff
| Author: <ユーザー名> <登録emailアドレス>
| Date:   Fri Sep 22 13:17:30 2017 +0000
| 
|     line3
| 
* commit 7c8ba2c8a05f996ca33a26b176ba6d2ff00dcd53
| Author: <ユーザー名> <登録emailアドレス>
| Date:   Fri Sep 22 13:15:28 2017 +0000
| 
|     add consol log which is I wrote today
| 
* commit 0ccf01d20dd8526ffd8d400c07956e7f45febae4
  Author: <ユーザー名> <登録emailアドレス>
  Date:   Fri Sep 22 13:00:50 2017 +0000
  
      my fiirst commit
~/workspace/git_test (master) $ 
```

##3.コンフリクト(編集内容の競合)

**実施する環境の作成**
・topic-Aから派生するtopic-Cブランチを作成
・topic-Cにチェックアウトしたあと、README.mdを編集、コミットまでする

```console:topic-Cブランチを作成
~/workspace/git_test (master) $ git checkout topic-A
Switched to branch 'topic-A'
~/workspace/git_test (topic-A) $ git checkout -b topic-C
Switched to a new branch 'topic-C'
~/workspace/git_test (topic-C) $ git branch
  master
  topic-A
  topic-B
* topic-C
~/workspace/git_test (topic-C) $ ls
README.md  today_log.txt
~/workspace/git_test (topic-C) $ git add README.md 
~/workspace/git_test (topic-C) $ git commit -m "Add topic-C"
[topic-C 55b950c] Add topic-C
 1 file changed, 3 insertions(+), 1 deletion(-)
~/workspace/git_test (topic-C) $ 
```

<br>
**コンフリクトの発生**
masterの内容と、topic-Cの内容とで、競合が発生し、修正を求められる

```console:
~/workspace/git_test (topic-C) $ git checkout master
Switched to branch 'master'
~/workspace/git_test (master) $ git branch
* master
  topic-A
  topic-B
  topic-C
~/workspace/git_test (master) $ git merge topic-C
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.
~/workspace/git_test (master|MERGING) $ 
```

・因みにコンフリクトが発生したファイルには以下のようにコンフリクトの内容が表示される

```md:README.md
 <<<<<<< HEAD  #HEADはmaster内での状態
 topic-B
 \=======
 topic-C
 \>>>>>>> topic-C  #こちらはtopic-C内の状態
```

<br>
**コンフリクトを解消するには...**
コンフリクトが発生しているファイルを正しい形に修正し、git add → git commitすれば良い

```md:README.md
# git_test

line3

line5

line7

topic-A

topic-B

topic-C
```

ファイルを直したら、git add → git commit -m でコンフリクト解消

```console:コンフリクト解消
~/workspace/git_test (master|MERGING) $ git status
On branch master
You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

Unmerged paths:
  (use "git add <file>..." to mark resolution)

        both modified:   README.md

no changes added to commit (use "git add" and/or "git commit -a")
~/workspace/git_test (master|MERGING) $ git add
Nothing specified, nothing added.
Maybe you wanted to say 'git add .'?
~/workspace/git_test (master|MERGING) $ git add README.md
~/workspace/git_test (master|MERGING) $ git status
On branch master
All conflicts fixed but you are still merging.
  (use "git commit" to conclude merge)

Changes to be committed:

        modified:   README.md

~/workspace/git_test (master|MERGING) $ git commit -m "コンフリクト解消"
[master 7d2bb4a] コンフリクト解消
~/workspace/git_test (master) $ 
```