git コマンドの動作イメージ

# はじめに
本記事は

+ Gitを使ったことがない
+ 使ったことがあるけどいまいちよくわかってない
* 今更質問するのは恥ずかしい

という方向けに、業務で使ったことがあるGitコマンドを利用シーンごとに説明してみようというものです。
コマンドだけではイメージがわかないので、できるだけ図解していきたいと思います。

# 想定シーン
開発の開始から終了までの1サイクルの中で、一番使用頻度の高いコマンドを紹介していきます。

* 開発スタート
  * ソースをローカルに持ってこよう（git clone）
  * 新たにブランチを作ろう（git checkout）
  * ブランチをリモートに反映させよう（git 
* 開発途中
  * 編集中のブランチのソースを最新化しよう
* 作業完了
  * 編集したソースをリモートにプッシュしよう

何らかのトラブル（コンフリクト起こしちゃった、古い資産をマージしちゃった）については
事例があればそれをもとに書いていきたいところですが、
今のところは使う頻度が高いものから書いていこうと思います。

# シーン別 git コマンド
## ■開発スタート

### 1. ソースをローカルに持ってこよう
開発が始まったら最初にやることは、
GitHub上にあるソースの保存場所から、
自分のPCに開発資産（ここでは主にソースコード）を持ってくることです。

:::note info
GitHub上の保存場所を「リモートリポジトリ」
自マシン上に出来上がる保存場所を「ローカルリポジトリ」といいます。
:::

#### コマンド
**git clone**を使って指定のURLから開発資産を持ってきます。
資産を配置するディレクトリ内で実行します。

```bash
git clone https://github.com/XXXXXX/YYYY_PROJECT.git
```

:::note warn
＜メモ＞
XXXXX、YYYY_PROJECT
の部分は対象のリポジトリによって変わるので確認してから実行しましょう。
:::

#### イメージ
リモートリポジトリと同じ内容がローカルリポジトリに出来上がります。

![git_clone.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1729233/502fe180-7718-ed9a-0e3a-1f6f51a0bc84.png)

### 2. 新たにブランチを作ろう
ローカルリポジトリが準備できたら、開発用にブランチを作成します。
バグフィックス、プログラム改修など、ソースコードに手を入れる場合は、
原則としてブランチを作成すると覚えましょう。
リリース用の資産が入っているブランチを直接修正したりしないのが基本です。

#### コマンド
**git checkout**を使ってローカルにブランチを作成します。
資産を配置するディレクトリ内で実行します。

```bash
git checkout -b feature/fix-some-functions
```

:::note info
feature/fix-some-functions という名前のブランチを作成する例となります。
-b オプションを指定することで作成と同時に切り替えを実行します。
:::

#### イメージ
ローカルリポジトリに新しいブランチが作成されます。
この時点ではリモートリポジトリには反映されません。

![git_checkout.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1729233/78f7e773-d1d8-dae5-bf37-a4a348131165.png)

### 3. ブランチをリモートに反映させよう
ローカルに新たなブランチを作成したら、リモートにアップロードします。
これでチーム内の他のメンバーも新しいブランチで開発ができるようになります。

:::note warn
ローカルでのソースコードの編集が終わった後でも構いませんが、
その場合は、このコマンドを実行するまで他の開発者から作業中のブランチ
が見えない状態であることに注意しましょう。
:::

#### コマンド
**git push**を使ってリモートリポジトリにアップロードします。
資産を配置するディレクトリ内で実行します。

```bash
git push -u origin feature/fix-some-functions
```

:::note warn
＜メモ＞
feature/fix-some-functions というブランチをpushする例となります。
ブランチを新規作成して最初のpushでは-uを付けます。
originはリモートリポジトリの場所を表す別名です。
:::

#### イメージ
ローカルリポジトリにしかなかったブランチ（図内の赤破線）
がリモートリポジトリに反映されます。

![git_push_u.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1729233/6d56c849-7981-fdf2-f858-6799abad1d98.png)

## ■開発途中
### 1. ローカルのソースを最新にしよう
チーム開発をしている場合、同じブランチで複数のメンバーがソースコードを編集します。
他メンバーが編集したソースコードは、そのままではローカル作業ブランチには反映されません。
リモートブランチから最新のソースコードを持ってきて、ローカル作業ブランチに反映してやる必要があります。

#### コマンド
**git pull**を使ってローカル作業ブランチの資産を最新にします。
資産を配置するディレクトリ内で実行します。

```bash
git pull
```

:::note warn
＜メモ＞
対象のブランチの資産のあるディレクトリで実行します。
ローカル作業ブランチの資産が、
リモートブランチの最新の資産で上書きされるので注意が必要です。
編集中の資産とリモートの資産とでコンフリクトがあるとエラーが出ます。
:::

#### イメージ
リモートリポジトリにある資産がローカルリポジトリに反映されます。

![git_pull.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1729233/b7fd24cb-a1b5-f362-fc1d-43f9c8537bc1.png)

## ■作業完了
### 1. 編集したソースをリモートにプッシュしよう
ローカルで編集・コミットしたソースをリモートブランチに反映させる作業です。

#### コマンド
**git push**を使ってリモートブランチ及びリモート追跡ブランチに資産を反映させます。
資産を配置するディレクトリ内で実行します。

```bash
git push origin feature/fix-some-functions
```

:::note warn
＜メモ＞
feature/fix-some-functions というブランチをpushする例となります。
originはリモートリポジトリの場所を表す別名です。
:::

#### イメージ
ローカルリポジトリで編集・コミットしたブランチの状態がリモートリポジトリとリモート追跡リポジトリに反映されます。

![git_push.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1729233/53b63a1a-d0b4-4d9f-cf81-1d788f2f1099.png)