100日後にエンジニアになるキミ - 57日目 - Git - Gitの使い方3

昨日までのはこちら

[100日後にエンジニアになるキミ - 42日目 - クラウド - クラウドサービスについて](https://qiita.com/otupy/items/d1765f1541a104ed6133)

[100日後にエンジニアになるキミ - 36日目 - データベース - データベースについて](https://qiita.com/otupy/items/7af17635d576677606dc)

[100日後にエンジニアになるキミ - 24日目 - Python - Python言語の基礎1](https://qiita.com/otupy/items/6d1e5453f530e07b7aec)

[100日後にエンジニアになるキミ - 18日目 - Javascript - JavaScriptの基礎1](https://qiita.com/otupy/items/2f71d5f9c754b29d9555)

[100日後にエンジニアになるキミ - 14日目 - CSS - CSSの基礎1](https://qiita.com/otupy/items/61a97863f6df14171994)

[100日後にエンジニアになるキミ - 6日目 - HTML - HTMLの基礎1](https://qiita.com/otupy/items/cd2315dcb38671cfded0)

[100日後にエンジニアになるキミ - 53日目 - Git - Gitについて](https://qiita.com/otupy/items/0abaad82a7f3fea73f1f)

最近の開発ではGitが欠かせません。
本日はGitの使い方の続きです。

昨日の講座はこちら
[100日後にエンジニアになるキミ - 56日目 - Git - Gitの使い方2](https://qiita.com/otupy/items/24458a3cc20325bae6da)

## 昨日までのおさらい

`ローカルリポジトリ`を作ってファイルを作成してコミットする。

`Github`にアカウントと`リモートリポジトリ`を作って
`ローカルリポジトリ`のファイルを`リモートリポジトリ`にプッシュする。

`リモートリポジトリ`をローカルに複製する

ここまで出来たら残る操作の学習に移りましょう。

## ブランチの仕組み(branch)

ソフトウェアの開発では複数のメンバーが同時に機能追加を行ったりバグ修正を行ったりするので
複数のリリースバージョンが存在し、それぞれを保守しなければならないといったこともあります。

並行して行われる複数のバージョン管理を行うためGitには`ブランチ`という機能が備わっています。

**ブランチ**

`ブランチ`とは作業履歴の流れを分岐して記録していくためのものです。
`分岐したブランチ`は他の`ブランチ`の影響を受けないため同じリポジトリ中で
複数の変更を同時に進めていくことができます。

![](https://backlog.com/ja/git-tutorial/assets/img/stepup/stepup1_1.png)

参考：
https://backlog.com/ja/git-tutorial/stepup/01/

分岐したブランチは他のブランチと`マージ`(合流)することで1つにまとめることが出来ます。

**masterブランチ**

リポジトリに最初のコミットを行うとGitは`master`という名前の`ブランチ`を作成します。
以後のコミットはブランチを切り替えるまで`masterブランチ`に追加されていきます。

![](https://backlog.com/ja/git-tutorial/assets/img/stepup/stepup1_3.png)

参考：
https://backlog.com/ja/git-tutorial/stepup/01/

### 作業ブランチを作成する(branch)

最初は`masterブランチ`しかない状態です。
作業用のブランチを作成するには`branch`コマンドを用います。

`git branch ブランチ名`

```
git branch branch1
```

これで新しく作業ブランチを作成できました。


### 作業ブランチを確認する(branch)

今作業を行なっているブランチが何処なのかは`branch`コマンドで確認することが出来ます。

`git branch`

```
git branch
```
  branch1
* master

作業ブランチには`*`がつきます。


### 作業ブランチを切り替える(checkout)

作業ブランチを切り替えを行うには`checkout`コマンドを用います。

先に移動先の`作業ブランチ`を作成しておかないと移動できないので
あらかじめ`branch`コマンドで作成しておきましょう。

`git checkout ブランチ名`

```
git checkout branch1
```
Switched to branch 'branch1'

作業ブランチが切り替わりました。
これでコミットすると、この作業ブランチにコミットされることになります。

コマンドでオプション`-b`をつけるとブランチ作成とチェックアウトを同時に行えます。
`git checkout -b ブランチ名`

```
git checkout -b branch2
```
Switched to a new branch 'branch2'

## プルリクエストとは(Pull Requests)

`プルリクエスト`は他の開発者に更新を通知する機能です。

`プルリクエスト`は`Git`自身の機能ではなく`GitHub`が最初に提供した機能で
今では主要なGitホスティングサービスやツールで利用できます。

`プルリクエスト`は次のような機能を提供しています。

・機能追加や改修など作業内容を担当者や関係者に通知
・ソースコードの変更箇所を表示
・ソースコードに関するコミュニケーションの場を提供

`プルリクエスト`は一覧で見ることができるため未完了の`プルリクエスト`を簡単に確認できます。
ソースコードをレビューして最終的にマージされるソースコードの品質を高くできます。

プルリクエストを導入した際の流れは次のとおりです。

1.開発者がGitHubにブランチをプッシュする
2.開発者がブランチからプルリクエストを作成する
3.レビュワーがコードをレビューする
4.ブランチをマージする

![](https://backlog.com/ja/git-tutorial/assets/img/pull-request/pull_request3_1.png)

参考：
https://backlog.com/ja/git-tutorial/pull-request/03/

### プルリクエストを作成する

`Github`から`プルリクエスト`を行うには
リポジトリのトップ画面で`New Pull Request`ボタンをクリックして作成を開始します。

![aaaa.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379626/cb3fba26-036e-defb-5e70-2cf97d1f3c0a.png)


### リモートリポジトリからプルする(pull) 

複数人で作業をすると`リモートリポジトリ`がどんどん更新されていきます。
変更した内容を自分の`ローカルリポジトリ`に取り込む必要が出てきます。

`リモートリポジトリ`から`ローカルリポジトリ`を更新するにはプル`pull`という操作を行います。

`git pull`では全てのブランチの変更内容を取得し現在作業対象としている
ブランチ(通常は`master`)の変更内容を作業ディレクトリに反映します。

特定のブランチの変更内容だけを取り込みたい場合は
`git pull リモートの名前 ブランチの名前`
と指定します。

`git clone」`を実行すると複製元の`リモートリポジトリ`には`origin`という名前が付きます。

デフォルトのブランチは通常`master`という名前になっているため
`git pull origin master`と実行するとデフォルトブランチだけを更新します。

```
# リモートリポジトリで変更された内容を全て取得し現在の作業ツリーに反映する
git pull

# デフォルトブランチの変更内容を取り込む
git pull origin master

# 指定したブランチの変更内容を取り込む
git pull リモートの名前 ブランチの名前
```

他の人の作業更新を聞いたらファイルの更新を行いましょう。
まずは作業ディレクトリに向かいます。

```
cd 作業ディレクトリ
```

作業ディレクトリに着いたら`pull`コマンドを実行します。

```
git pull origin master
```

改めて`ローカルリポジトリ`のファイルを見てみると更新されているようです。




## まとめ

ブランチの仕組みとプルリクエストを使った更新の通知の仕組みを覚えて
開発現場での作業工程がどんな感じになるのかを知っておこう。

君がエンジニアになるまであと43日

## 作者の情報
乙pyのHP：
http://www.otupy.net/

Youtube：
https://www.youtube.com/channel/UCaT7xpeq8n1G_HcJKKSOXMw

Twitter：
https://twitter.com/otupython