Windows10でGitHubを始める～⑦GitHubへのPullRequest

個人学習メモ。

# プルリクをするまでの手順
1. リモートリポジトリをローカルにcloneする
1. ローカルリポジトリでブランチを作成し、ブランチを切り替える
1. 切り替えたブランチで編集作業を実施し、リモートリポジトリに変更をpushする
1. GitHub上でPullRequestする
1. GitHub上でMergeする
1. リモートリポジトリの不要ブランチ削除
1. ローカルリポジトリの不要ブランチ削除

# 1.リモートリポジトリをローカルにcloneする
GitHub上のリモートリポジトリを手元のローカルリポジトリとして複製（clone）する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/87aac287-0ac3-0028-7381-d960ec4fd40b.png)

コピーしたいリポジトリ（今回は`qiita-test`）のページにブラウザでアクセスし、URLを[code]からコピーする。
※私はGCMで認証済みなので今回はHTTPSのURLをコピーする。
[Git～GitHub間の認証についてはこちらを参照。](https://qiita.com/emiki/items/eeaf77d51aadef98aea9)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/1417df99-0715-8034-1739-d50325f5cac1.png)
Git Bashを開く。
cloneする前に、リモートリポジトリをcloneしてよいフォルダに`cd`で移動しておく。
Git Bashで以下コマンドを実行する。
```
git clone <コピーしたURL>
```
`ll`でディレクトリ内のファイル・フォルダ一覧を表示すると、新たにcloneしたリポジトリがローカルに存在することが確認できる。
```
$ ll
total 0
drwxr-xr-x 1 emi 197121 0 Apr  9 17:29 memo/
drwxr-xr-x 1 emi 197121 0 Apr 10 00:27 qiita-test/
```

# 2.ローカルリポジトリでブランチを作成し、ブランチを切り替える
リモートリポジトリをクローンすると`main`ブランチにいる状態になる。例えば`main`ブランチを直接編集して本番環境にいきなり反映させるのは危険なので、別のブランチを作成して、別のブランチで編集作業をおこなう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/bf96f716-bd9f-726b-c6ee-47e38bf1a83f.png)
まずクローンしてきたリポジトリに`cd`で移動する。移動すると、ブランチが(main)と表示されているのがわかる。
```
$ cd qiita-test/

emi@端末名 MINGW64 ~/qiita-test (main)
$
```
以下コマンドで新しいブランチを作成する。
```
git branch <作成するブランチ名>
```
今回は`issue`という名前で新しくブランチ作成する。
```
git branch issue
```
以下コマンドで、存在するブランチ一覧を表示できる。`*`がついている方が今いるブランチとなる。
```
$ git branch
  issue
* main
```
ブランチを切り替える。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/55620798-e3b3-07ef-4d4b-2933293b973b.png)
以下コマンドでブランチを切り替える。
```
git checkout <切り替えるブランチ名>
```
`issue`ブランチに切り替える場合は以下のようになる。
```
$ git checkout issue
Switched to branch 'issue'
```
`git branch`コマンドで現在のブランチを確認できる。
```
$ git branch
* issue
  main
```

# 3.切り替えたブランチで編集作業を実施し、リモートリポジトリに変更をpushする
適当にファイルを作成し、`git add .`でリポジトリ内の変更すべてをaddし、`git commit`でコミットする。`git push`でリモートリポジトリに`issue`ブランチプッシュする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/2697f44e-e695-f65c-468f-d7376598242f.png)

```
emi@端末名 MINGW64 ~/qiita-test (issue)
$ touch branch_test.txt

emi@端末名 MINGW64 ~/qiita-test (issue)
$ git add .

emi@端末名 MINGW64 ~/qiita-test (issue)
$ git commit -m "branch_test.txt を追加"
[issue c484a8a] branch_test.txt を追加
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 branch_test.txt

emi@端末名 MINGW64 ~/qiita-test (issue)
$ git push origin issue
Enumerating objects: 3, done.
:
:
 * [new branch]      issue -> issue

emi@端末名 MINGW64 ~/qiita-test (issue)
$
```
※ローカル端末のGit Bashで`git init`して作成したローカルリポジトリのブランチ名は`master`になるが、リモートリポジトリから`git clone`してローカルに複製されたリポジトリのブランチ名はデフォルトで`main`となる。pushの際は注意する。

# 4.GitHub上でPullRequestする
リモートリポジトリを見ると`Compare & PullRequest`という緑のボタンが表示されるのでクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/f20beb76-5f77-3a1e-6ddd-c2879c296ef5.png)

コミット時にどんな変更を加えたのか分かるように説明文を入力し、レビューしてもらう人を入れる。
（今回は自分のリポジトリでプルリクの練習をしているだけなので入れていない。）
**今回は省略しているが、説明文には【概要】【経緯】【詳細】など、どんな変更を行ったのか、見た人がすぐに分かる内容を記載する。**
どのブランチからどのブランチにpull requestするかを確認する
（今回はissueブランチからmainブランチへのpull request）
確認したら、「Create pull request」をクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/9270dc02-367a-8cac-4972-8bd19bf16958.png)

## 4.5. GitHub上でIssueを作成し、PullRequestに紐づける
今回は省略する。別途まとめるかも。

# 5.GitHub上でMergeする
※本来はレポジトリ管理者・またはレビューする人がおこなう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/ed4ab583-8798-316f-43ed-e2811915ee39.png)
プルリクがくると「Merge pull request」ボタンが表示されるので、内容を確認してクリックすると
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/8346689d-af1a-91d5-4111-f5fd31002a64.png)
「confirm merge」ボタンになるので、内容を確認してクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/ee2b59fe-27a6-0984-e492-1645b8d6aef4.png)
「Merged」となり、`issue`ブランチでおこなった変更が`main`ブランチにマージされた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/8d6ec176-c4ce-a6ea-c66a-913f60e40496.png)
Codeタブに戻ると、`main`ブランチに変更が反映されていることがわかる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/5f9766c1-36a7-0b26-a567-790f2317c424.png)

# 6.リモートリポジトリの不要ブランチ削除
マージが完了したので、リモートリポジトリにpushしたときに作成されたリモートの`issue`ブランチが不要になる。削除する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/b4c3995f-3a93-bcae-3f4d-84f2621a8681.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/f587f631-e8ba-ddf2-fa2d-b80a5021c393.png)
[Pull Requestタブ]-[Closed]から先ほどのPull Requestに戻ると、issueブランチを画面上でそのまま削除できるので、「Delete branch」でリモートリポジトリ上の`issue`ブランチを削除する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/266bf058-e207-6e28-56e6-5b8b59336e19.png)
deleted the issue branch now と表示され、`issue`ブランチがなくなっているのが確認できる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/9d9118cf-dcbf-c3b7-a4f9-4a5213b0cd6d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/f44cd12a-f075-f38f-695f-05b0472b10d6.png)

# 7.ローカルリポジトリの不要ブランチ削除
リモート`issue`ブランチは削除したが、ローカルにも`issue`ブランチが残っているので削除する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/559b51e9-388b-e9e9-506e-bdfe46d7e6a9.png)
まずローカル`issue`ブランチから`main`ブランチに移動する。Git Bashで`git checkout <移動先ブランチ名>`を実行し、`issue`ブランチから抜ける。
```
emi@端末名 MINGW64 ~/qiita-test (issue)
$ git checkout main
Switched to branch 'main'

emi@端末名 MINGW64 ~/qiita-test (main)
$ 
```
`git branch -D <削除するブランチ名>`で、ローカル`issue`ブランチを削除する。

```
$ git branch -D issue
Deleted branch issue (was c484a8a).
```
`git branch`コマンドで、`issue`ブランチがなくなったことを確認する。
```
$ git branch
* main
```

# 参考
[Windows10でGitHubを始める～⓪Gitの概念とインストールソフトの種類](https://qiita.com/emiki/items/5c8e52cf6b8506015462)
[Windows10でGitHubを始める～①Gitインストール](https://qiita.com/emiki/items/c0aa0b4da4b63921b153)
[Windows10でGitHubを始める～①'おまけGitホームディレクトリ変更](https://qiita.com/emiki/items/d3f7c054b70171218f64)
[Windows10でGitHubを始める～②GitHubアカウント作成](https://qiita.com/emiki/items/dadf77e9ae1e2b192323)
[Windows10でGitHubを始める～③GitHubでのメールアドレス設定とGitクライアントでのユーザ名・メールアドレス設定](https://qiita.com/emiki/items/4103150a5d7a7cfbff24)
[Windows10でGitHubを始める～③'おまけユーザ名・メールアドレス設定について詳細](https://qiita.com/emiki/items/24212696b54fd16e8af8)
[Windows10でGitHubを始める～④リモートリポジトリの作成（GitHub）](https://qiita.com/emiki/items/5080d948af4a2d0febf5)
[Windows10でGitHubを始める～⑤Githubにプッシュする](https://qiita.com/emiki/items/a2871ab626396e95d9ec)
[Windows10でGitHubを始める～⑥-0.Git～GitHub間の認証について](https://qiita.com/emiki/items/eeaf77d51aadef98aea9)
[Windows10でGitHubを始める～⑥-1.Git操作時のGitHub認証HTTPS（Git Credential Manager）](https://qiita.com/emiki/items/3f2ebda7280374fb3bb7)
[Windows10でGitHubを始める～⑥-2.Git操作時のGitHub認証HTTPS（Personal access token）](https://qiita.com/emiki/items/498b05ede19eee3ad916)
[Windows10でGitHubを始める～⑥-3.Git操作時のGitHub認証SSH編](https://qiita.com/emiki/items/1f1fc0bf0c2c4347148d)
[Windows10でGitHubを始める～⑦GitHubへのPullRequest](https://qiita.com/emiki/items/8619441dca761869177f)

https://www.codeadvisor.jp/entry/2018/02/18/124557

https://backlog.com/ja/git-tutorial/stepup/09/

https://ja.stackoverflow.com/questions/5734/git-%E4%B8%8D%E8%A6%81%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%9F%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%81%AE%E5%89%8A%E9%99%A4%E6%96%B9%E6%B3%95%E3%81%AF

https://qiita.com/pugiemonn/items/34b56b1aa757e33133e4