Git高速理解

**時間をかけずにGitをとりあえず使えるようにしたい（しなければならない）人向けです。**
大体のイメージで書くので厳密には違うところもあると思いますがご容赦ください(~~適当にググってください~~)。
**なお、以下ではすでにリモートリポジトリが存在する前提で話を進めます。**
**一から作る場合は[備考](https://qiita.com/night_gorilla/items/417d8fbb183627d521c6#6-備考)を参考にして下さい。**

#1. Gitとは
Gitはバージョン管理システムです。
GitHubはみんなでバージョン管理するためのものです。

#2. 用語
**リモート**：外部サーバ（GitHubやGitLab）
**ローカル**：自分のPC（git管理下のディレクトリ）
**リポジトリ**：データの貯蔵庫
**プル**：リモートリポジトリからデータを取ってきてマージすること
**プルリクエスト：**プルするように要請すること。これにより他の人からコードレビューを受けることができる
**プッシュ**：リモートリポジトリに変更を記録すること
**コミット**：変更をリポジトリに記録すること
**コミットメッセージ：** そのコミットがどのような変更なのかの説明
**ステージングエリア**：コミットする前にデータを置く場所
**ブランチ**：作業場。自分が作業するときにはブランチを作って（*切る* という）そこで開発する。名前は好きにつけられる
**マージ**：ブランチを統合させること。マージすることによりプロジェクトが進む
**コンフリクト：**同じ箇所を他の人が違うように書いていてマージできない状態
**master**：ブランチの名前。全てのブランチの元であり、完成版を置く。ここに未完成のもを置くと~~殺されます~~
**develop**: 同上。ここは主に開発を進める場所。大抵はこのブランチからfeatureブランチを切り、そこで開発する

#3. コマンド
**clone** : リモートにあるリポジトリをローカルにコピーする
**add** : ステージングエリアに変更を追加する
**commit** : ローカルリポジトリに変更を追加する
**push** : リモートリポジトリに変更を追加する
**checkout** : ブランチを切り替える
**branch** : ブランチを作成、表示する
**status**: 現在のaddやcommitの状態を確認する　※何かと便利。この記事では使わない
**pull**: リモートリポジトリからデータを取ってきてマージする

※全て**git**と打った後につけます

どんなオプションがあるかは~~ググって下さい~~。

実際は、**git help <コマンド名>**を打つと教えてくれます（英語）。

```:bash
git help checkout
```

<img width="683" alt="スクリーンショット 2019-07-20 11.21.59.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/465523/a4839ff3-3c36-1d61-3e88-7e24ba1c205e.png">

#4. 流れ
###1. クローンする
**コマンド：git clone <クローンしたいリモートリポジトリのURL>**

試しにVue.jsのリポジトリをクローンします。
※自分が作業するディレクトリに移ってコマンドを打ってください。

<img width="1048" alt="スクリーンショット 2019-07-19 21.01.49.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/465523/7284f182-13b2-a190-d2ba-4cbf1a2a1964.png">



```:bash
git clone https://github.com/vuejs/vue.git
```

###2.ブランチを切る
クローンしたら自分の作業用のブランチを切って下さい。
**コマンド：git branch <ブランチ名>**

```:bash
git branch feature
```

###3. ブランチを移動する
ブランチを切っただけではそのブランチに移動しないので、checkoutコマンドを打つ必要があります。
忘れるとmasterで作業することになるので注意。

**コマンド：git checkout <ブランチ名>**

```:bash
git checkout feature
```

###※ 楽な方法
ブランチを切って移動するのを一発でやる方法があります。
**コマンド：git checkout -b <ブランチ名>**

```:bash
git checkout -b feature
```


###4. addする

ファイルに変更を加えたらgit addして変更をステージングエリアに追加しましょう。

**コマンド：git add <追加したいファイル名>**

変更したファイル全てをaddしたい場合は、**git add .** で出来ます。最後のピリオドをお忘れなく。

```:bash
git add .
```

###5. コミットする

git add でファイルをステージングエリアに追加したら、コミットして変更をローカルリポジトリに追加しましょう。

**コマンド：git commit -m"<コミットメッセージ>"**

ここで *-m* はコミットメッセージをつけるオプションです。
つけなくてもコミット出来ますが、vim（エディター）が立ち上がってそこで記述を求められるのでオプションで書いた方が楽です。

**また、コミットメッセージは何をどのような目的で変更したのかを分かりやすく端的に書いて下さい。**
もし、自分だけのプロジェクトだとしても、git commit -m"修正5" などと書いては、3日後には自分でも何をしたのかわからなくなります。

```bash
git commit -m"initial commit"
```

###6. プッシュする
ローカルリポジトリに変更をコミット出来たらリモートリポジトリにプッシュしましょう。

**コマンド：git push <リモートリポジトリ名> <ブランチ名>**

リモートリポジトリ名は大抵 **origin** です。

```:bash
//リモートリポジトリに同名のブランチがない場合、-uのオプションをつけます
git push -u origin feature

//ある場合
git push origin feature
```

###7. プルリクエストを作成する
プッシュしたら、プルリクエストを作成し、他の開発者にレビューしてもらいましょう。
許可されたら、マージできます。

<img width="985" alt="スクリーンショット 2019-07-20 12.21.29.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/465523/1636c39e-d23c-1838-8905-631352c36440.png">

プルリクエストを作成します。

<img width="765" alt="スクリーンショット 2019-07-20 12.22.50.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/465523/7841b3d3-b2a6-a43f-c0e3-716970cc53e7.png">
コメントを書きます。
※タイトルとコメントは実際にはちゃんと書いて下さい。

<img width="780" alt="スクリーンショット 2019-07-20 12.27.44.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/465523/34f7e48b-549a-7e14-41aa-db2529c535ef.png">

コンフリクトがないとマージできます。
※権限を持った人しかできません。

<img width="690" alt="スクリーンショット 2019-07-20 12.31.14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/465523/d6ec8e39-5ab2-8690-dbc5-7f003e3ade42.png">
マージします。

<img width="772" alt="スクリーンショット 2019-07-20 12.32.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/465523/62008fa6-90bf-eb01-902c-2bb031cd6d88.png">
マージできました。


###7. プルする
devolpなど他のブランチが変更された場合その変更を取り込みましょう。

**コマンド：git pull <リモートリポジトリ名> <ブランチ名>**

```:bash
git pull origin develop
```

#5.まとめ
クローンする->ブランチをきる->作業する->addする->commitする->pushする->プルリクエストを作成する->pullする
の流れを覚えておけばなんとかなります。

細かいところはちゃんとしたサイトを参考にして下さい。

**以下、ちゃんとしたサイト**
・サクッと理解したい人向け
http://backlog.com/ja/git-tutorial/

・しっかり理解したい人向け
http://www-creators.com/git-command

・ガチりたい人向け
https://git-scm.com/book/ja/v2


#6. 備考
リモートリポジトリを自分で作る人向け
<img width="778" alt="スクリーンショット 2019-07-20 12.47.51.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/465523/1b6f4505-aabb-5bce-1350-dd0ce867b04b.png">
ここで作成します。
作成したら、ターミナルで、

```:bash
// ディレクトリをgit管理下に置きます
git init 
// リモートリポジトリを設定します
git remote add origin <リポジトリのURL>
```
あとは上の流れと同じです。