Gitコマンドを使ってGitHubにPullRequestするまでを細かく書き出した

フィヨルドブートキャンプ受講生の方向けに書いたので、初学者向けです。
お困りの方の参考になれば幸いです :pray: 


# 1. ブランチを作成する
まず、変更を適用するためのブランチを作成します。
ブランチは大抵の場合は 本流のブランチ(main もしくは master)から伸ばすことが多いかなと思います。 
例えば「test_branch」という名前のブランチを作成したい場合は、
`$ git switch -c test_branch` 
で、ブランチの作成と切り替えを同時に行うことができます。`-c` は create の c と覚えると良さそうです。
`$ git branch` コマンドで、今どんなブランチがあるか・現在どのブランチを参照しているかを把握することができます。


![1_create.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24870/6e15540e-ca62-f2b7-7f31-4815f820cfa4.png)

# 2. ファイル内容を変更する
test_branch を参照している状態で、ファイルを変更します。
変更の内容は 
`$ git status` (どのファイルが変更されているかをチェック)、
`$ git diff` (ファイルの変更内容をチェック) 
を使いつつ確認できます。
特定のファイルの変更のみ確認したい時は `$ git diff test.txt` などファイル名を指定します。

![2_diff.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24870/6c5561f0-00cf-f50b-e3ca-1418794781e2.png)


# 3. 変更のうち、何をコミットするか決める(ステージング)
複数変更があっても、コミットする内容を取捨選択することができます。"コミットする予定"の状態をステージングといいます。コミットしたいファイルを 
`$ git add test.txt` 
でステージングに追加します。
ステージングの状況は `$ git status` で確認できます。「Changes to be commited:」の欄にtest.txtが入り、コミットされる予定になっていることがわかります。
![3_add.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24870/b445bd70-43ff-b1a9-c8a5-7a8f0e18130f.png)


# 4. コミットする
`$ git commit -m "コミットコメント"` でコミットできます。
コミットコメントはただの「変更しました」などではなく、その**変更内容を表す説明をしっかり記述しましょう**。
vimやemacsの操作に慣れていれば、 `-m` オプションなしで複数行書くモードにしても良いでしょう。
コミットコメントの書き方については、プロジェクトによってルールが決まっていることがあるケースもあるでしょう。詳しくは、多くの方がいっぱい記事をかいているので説明はそちらにおまかせします。
[Gitのコミットメッセージの書き方 \- Qiita](https://qiita.com/itosho/items/9565c6ad2ffc24c09364)
[僕が考える最強のコミットメッセージの書き方 \- Qiita](https://qiita.com/konatsu_p/items/dfe199ebe3a7d2010b3e)
[誰にとってもわかりやすいGitのコミットメッセージを考える ｜ Tips Note by TAM](https://www.tam-tam.co.jp/tipsnote/program/post16686.html)

練習としては、一旦、「未来の自分がわかる」レベル感で書いておくと良いと思います。

`$ git status` を前後に実行すると、ステージングされたファイルがコミットされて変更内容とみなされなくなったことがわかります。
commitの記録は `$ git log` で確認できます。

![4_commit.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24870/8cb11a9f-73ab-0192-74c0-e7f7e9cc2594.png)


# 5. リモートリポジトリへpushする
前提としてpush先の登録はすでにあるものとします。cloneすればすでに登録は済んだ状態で開始できてるはず、そうでなければ `$ git remote add origin` が必要かなと思います。詳しい説明は省略します :bow: 
[リポジトリをクローンする \- GitHub Docs](https://docs.github.com/ja/github/creating-cloning-and-archiving-repositories/cloning-a-repository)
[Githubに新規リポジトリを追加 \- Qiita](https://qiita.com/sodaihirai/items/caf8d39d314fa53db4db)

今登録されているリモートリポジトリを確認するには `$ git remote -v` とします。
変更を入れたブランチ `test_branch` は、
`$ git push origin test_branch` 
でリモートリポジトリ(今回の場合GitHub)へpushすることができます。 

ここで使用されている `origin` は、 `remote -v` の時に表示されたリモートリポジトリ登録名を指しています。
pushしたら、CUI (コンソール) での操作はおしまいです。

![5_push.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24870/3f3f9163-b6ca-23ea-d493-bd6b06ae4396.png)




# 6. GitHubでPull requestを作る
push時に次のような案内もありましたので、GitHubにアクセスしてみましょう。

```
remote: Create a pull request for 'test_branch' on GitHub by visiting:
remote:      https://github.com/betachelsea/git-test/pull/new/test_branch
```

案内されたURLにそのまま飛んでも良いです。
もしくは、GitHubの該当リポジトリを見に行くと黄色枠で新しくpushされたブランチについて表示されています。
「Compare & pull request」のボタンを押すと、上記と同じURLに遷移します。

![6_1_github_top.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24870/140c841f-8fc0-b4df-26db-90ff5ec61a9c.png)




「Open a pull request」の画面になったら、Pull requestのタイトル、説明を記入します。
参考画像ではあんまりにも中身がないのでスッカスカのタイトル、説明ですが、実際の開発現場ではレビュアーのためにももっと詳しく書きましょう。

![6_2_pullrequest.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24870/684f6655-5f2d-a399-14fd-1a1e7269166c.png)



「Create pull request」ボタンを押すと、Pull request が作成されます。

![6_3_pullrequest.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24870/8332bec4-8948-a008-0b6b-1d4ef33cfc2f.png)





# extra 色々できます
若干発展的なので追々、と思いつつ、Gitは痒いところにも手が届くよ〜ということをアピールします。
他にも色々あるので、困ったら「何かしらできるはず」と思って調べていただくと良いかなと思います。

## ステージング済みの変更内容を確認したい
`$ git diff --cached` で確認できます。

## やっぱりこのファイルのコミットをやめたい(ステージングの取り消し)
`$ git restore --staged test.txt` でやめられます。
(git status するとメッセージに案内がありますね。)

## ファイルの変更内容のうち一部だけコミットしたい
`$ git add -p test.txt` で選べます。
ややこしいので詳しくは他の解説記事におまかせします！
[Git \- 対話的なステージング](https://git-scm.com/book/ja/v2/Git-%E3%81%AE%E3%81%95%E3%81%BE%E3%81%96%E3%81%BE%E3%81%AA%E3%83%84%E3%83%BC%E3%83%AB-%E5%AF%BE%E8%A9%B1%E7%9A%84%E3%81%AA%E3%82%B9%E3%83%86%E3%83%BC%E3%82%B8%E3%83%B3%E3%82%B0)
[横着で神経質な私とあなたに贈るgit add \-p \- Qiita](https://qiita.com/crifff/items/1abf08bca4ce51db4775)
[git add \-p 使ってますか？ \- Qiita](https://qiita.com/cotton_desu/items/bf08ac57d59b37dd5188)
[git add \-pのすゝめ \- DEV Community](https://dev.to/dyoshimitsu/git-add-p-144f)


## 困った時はメッセージを読む
Git、都度出てくるメッセージを読むと「このコマンドを使え!」という案内が出ているので、なにかうまくいかないことがあったら、一旦深呼吸して英語を読むとすぐ解決できたりします。


がんばっていきましょう :muscle: