CI/CDをkatacodaで体験（初心者向け） - Part6(Experiments Using Branches)

# CI/CD入門
このぺーじでは、[katacoda](https://www.katacoda.com/)と呼ばれる「ブラウザから無料で勉強用のインスタンスを起動できるWebサービス」を利用してCI/CDを実践します
内容は上記リンクに沿うので、不明点があればそちらへどうぞ

## Gitのバージョン管理について - Scenario6 - Experiments Using Branches
ここでは、CI/CDとして欠かせないGitによるバージョン管理について学習します
このシナリオで学習することをさっと確認する場合は**概要**を確認
**理解に間違い等がございましたら、ぜひご指摘ください**

### <font color="Red">概要</font>
>- branchの作成は、```git branch <new branch> <original branch>```や、```git checkout -b <new branch>```
- branchの一覧表示は、```git branch```。オプションとして```-va```は頻繁に利用
- branchの統合は、マージ先branchで```git merge <branch>```
- branchの削除は```git branch -d/D```


### Step 1 - Git Branch
gitを用いた開発では、ローカルレポジトリにmaster branchがデフォルトで作成される
このbranch上で直接開発を行うのではなく、複製した別のbranchを使うことでmaster branchにはローカルレポジトリ上での行うべき作業が行われたキレイな状態を維持することが可能
master branchをもとに別のbranchを複製する方法は```git branch <new_branch> <master branch>```で実現可能
branchの移動は```git checkout <to branch>```で実行

```
$ git branch -va
* ESC[32mmasterESC[m abe4241 First Commit on master
$ git branch new_branch master
$ git branch -va
* ESC[32mmaster    ESC[m abe4241 First Commit on master
  new_branchESC[m abe4241 First Commit on master
$ git checkout new_branch
Switched to branch 'new_branch'
$ git branch -va
  master    ESC[m abe4241 First Commit on master
* ESC[32mnew_branchESC[m abe4241 First Commit on master
```

また、```git branch -b <new_branch>```で同様にbranchを作成し、branchの移動（```git checkout <new_branch>```）も一度に行うことができる

```
$ git checkout -b test_branch
Switched to a new branch 'test_branch'
$ git branch -va
  master     ESC[m abe4241 First Commit on master
  new_branch ESC[m c112293 Commit on branch
* ESC[32mtest_branchESC[m abe4241 First Commit on master
```

### Step2 - List Branches
branchの一覧を確認する際は```git branch```で実現
以下のオプションはよく利用される
>```-a```：remote branchも表示。remotes/origin/master等
```-v```：各branchの最新のコミットメッセージも表示

*は現在いるbranchを示している

```
$ git branch -va
  master    ESC[m 93f6d42 First Commit on master
* ESC[32mnew_branchESC[m 66ce3bf Commit on branch
$ git branch
  masterESC[m
* ESC[32mnew_branchESC[m
$ git branch -v
  master    ESC[m 93f6d42 First Commit on master
* ESC[32mnew_branchESC[m 66ce3bf Commit on branch
```

### Step 3 - Merge To Master
gitにおいて複製元は複製先の変更を自動的に反映されない
反映させるために、```git merge```を用いる

```
$ ls -a
.  ..  .git  staging.txt
$ git branch -va
* ESC[32mmasterESC[m bade7a5 First Commit on master

~~~branch作成、ファイル追加~~~   //katacodaでは、step3に入った際に自動的にファイルが作成されている

$ ls -a
.  ..  .git  new-file-6.txt  staging.txt
$ git branch -va
  master    ESC[m bade7a5 First Commit on master
* ESC[32mnew_branchESC[m 7a52803 Fix for Bug #58
$ git checkout master
Switched to branch 'master'
$ git merge new_branch
Updating bade7a5..7a52803
Fast-forward
 new-file-6.txt | 1 +
 staging.txt    | 2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 new-file-6.txt
$ ls -a
.  ..  .git  new-file-6.txt  staging.txt
```

### Step 4 - Push Branches
ローカルレポジトリでの変更が済んだら、リモートレポジトリに変更の反映を行う
ここでは、すでに[Part3](https://qiita.com/tem-individual/items/4e9f0683f4d2a5efa8fe)（katacodaにおけるScenario 3 - Working Remotely）で経験済みなので省略
ちなみに、```git push```を初めて実行したことで、```git branch -va```の結果に```remotes/origin/master```branchが確認できるようになる

```
$ git branch -va
* ESC[32mmaster                   ESC[m 7a52803 Fix for Bug #58
  new_branch               ESC[m 7a52803 Fix for Bug #58
  ESC[31mremotes/origin/new_branchESC[m 7a52803 Fix for Bug #58
```

### Step 5 - Clean Up Branches
最後に、必要なくなったbranchの削除方法は```git branch -d <branch>```

```
$ git branch -va
* ESC[32mmaster                   ESC[m 7a52803 Fix for Bug #58
  new_branch               ESC[m 7a52803 Fix for Bug #58
  ESC[31mremotes/origin/new_branchESC[m 7a52803 Fix for Bug #58
$ git branch -d new_branch
Deleted branch new_branch (was 7a52803).
$ git branch -va
* ESC[32mmaster                   ESC[m 7a52803 Fix for Bug #58
  ESC[31mremotes/origin/new_branchESC[m 7a52803 Fix for Bug #58
```

マージされていないbranchを削除する場合はオプション```-D```を利用