超初心者のGitHub(2) ブランチ作成からプルリクエストまで

# ブランチ作成からプルリクエストまで

このエントリは[「超初心者のGitHub(1) リポジトリ作成からpushまで」](https://qiita.com/ym-sg/items/7c232c039d0f77aae255)の続きです。
前回は超初心者がなんとかpushするところまで出来ました。
が、チームで使うならブランチで作業してプルリク出してという流れは必須中の必須。もう少し頑張ります。

## 1. masterブランチに移動する
まずはいつもの`cd`で該当ディレクトリまで移動したら、`git checkout`でmasterブランチに移動します。

```Bash
git checkout master
```

そして`git pull`します。

```Bash
git pull
```

これでリモートのmasterブランチに更新があったら、リモートに持ってきてくれます。
よく言われることですが、`git pull` = `git fetch` + `git marge`です。一度にやってくれて便利ですね。

featureブランチを切る前に、まずはこれをやる癖を付けたらいいのかなと思います。



## 2. ブランチを作る
前回も少し書きましたが、今回はGit flowの手法を取り入れたチーム開発なのです。
とはいえreleaseブランチは使わないので、作業に使うのは **master, develop, feature**。（hot-fixは都度都度ですね）

基本的には**develop**ブランチで開発を進め、OK!となったら**master**にマージしていく感じです。

なので、まずは`git branch develop`と入力して**develop**ブランチを作成。
反応が帰ってこなくて不安になるも、`git branch`すると

```Bash
  develop
* master
```

出来てた！
「developとmasterという2つのブランチがありますよ」「今はmasterブランチにいますよ」ということですね。

では、`git checkout develop`と入力してdevelopブランチに切り替えます。

```Bash
git checkout develop
Switched to branch 'develop'
```
developにスイッチしました！
ちなみに、この一連の流れを一行で出来ちゃうコマンドもあります。

```Bash
git checkout -b develop
```
やっていることは「developブランチを作ってそっちに切り替える」です。ちゃんと出来たかどうかは`git branch`で確認しておきましょう。

## 3. addしてcommitしてpushする
では先ほどと同じように、README.mdに何か書き加えてみます。
一連の流れは割愛しますが、「ファイルに変更を加えたら**statusで確認してaddでステージングに上げてcommitしてリモートにpushする」**です。
それをdevelopブランチ上でやるということです。

### pushしたら怒られた
さて、statusしてaddしてcommitまではさっきと同じようにやりましたし出来ました。
が、これを`git push`しようとしたら怒られました。

```Bash
fatal: The current branch develop has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin develop
```
fatalとか言われると本当に怖い…。これは「上流ブランチがないよ」と言われてます。ローカルで新しいブランチを作ったけど、これに紐づくブランチがリモートにはないよということらしいです。

新しく作ってまだpushしてないんだからあるわけないのですが、親切にもこうすればいいよというコマンドを教えてくれてます。最後の行の

```Bash
git push --set-upstream origin develop
```


これを打ち込むと、リモートに上流ブランチを作ってくれてめでたしめでたし。
GitHubのページを見に行ったら、無事にdevelopブランチが表示されました。

※ 例えば feature/branch_name というブランチの上流ブランチを設定したい場合はこんな感じ

```Bash
git push -u origin feature/branch_name
```

## 4. プルリクエストする
ここまできたらあと一息。
今は、**develop**には修正したREADME.mdがあるけど、**master**には無いという状態です。

これ、masterにも反映させたいですよね。そこで**プルリクエスト**です。
チームメンバーに「変更したからここチェックしてね。大丈夫そうだったらマージして（する）ね」という通知をするやつです。（あってるかな…）

プルリク（PRとも書く）は、GitHubのページで行います。
リポジトリのページへ行ったら、「Pull requests」タブ→「New pull request」ボタンを押します。
<img width="1264" alt="スクリーンショット 2020-07-17 17.27.28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621295/36a7dda7-bd2c-934d-ed01-4e6b264568dc.png">

するとこういう画面になるので、プルダウンを**「base:master」←「compare:develop」**にして**「Create pull request」**ボタンをクリック！
<img width="1267" alt="スクリーンショット 2020-07-17 17.30.41.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621295/807d4773-b52d-152a-8284-0547b0062607.png">

タイトル（とコメント）を書いて**「Create pull request」**ボタンをクリック。
<img width="1274" alt="スクリーンショット 2020-07-17 17.33.35.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621295/aa7479a2-3bd9-a370-8921-8d065279c5e0.png">

これでプルリク出来ました！
<img width="1280" alt="スクリーンショット 2020-07-17 17.35.48.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621295/a6c28aee-c1c9-faa5-31fc-505897693df9.png">

ちなみに、「File changed」タブでコードの変更箇所が見られます。
ここでチェックしてOKだったりNGだったりしたら、コメントします。
コメント履歴は「Conversations」に残っていきます！

## 5. マージする
チームでやるときは複数人にレビューしてもらって、OKが出たらmasterにマージしていきます。

**「Pull requests」**→**「Coversation」**でコメント確認したら、
<img width="1015" alt="スクリーンショット 2020-07-17 17.44.20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621295/98666965-53cb-155c-9aee-effc76c78ebd.png">

その下部にある**「Marge pull request」**ボタンをクリック。
ボタンが**「confirm marge」**に変わるのでまたまたクリック。
<img width="933" alt="スクリーンショット 2020-07-17 17.45.13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621295/f77a1a93-052f-6f55-8c0c-4439e8e10b36.png">

こんな表示が出たら成功です！
<img width="925" alt="スクリーンショット 2020-07-17 17.47.42.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621295/48e9d033-c22d-d137-ec60-abb9d3d10d80.png">



Thanks
参考にさせていただきました。ありがとうございました。
https://qiita.com/TakumaKurosawa/items/79a75026327d8deb9c04