README編集後にgit pushしたら ! [rejected] master -> master (fetch first) errorと言われる

## 記事の目的
READMEをGithubにて編集後、git pushしたら ! [rejected] master -> master (fetch first) errorなどと言われ、その対処法を書いた記事になります。
筆者は、プルリクとかマージとかはやったことがあるけれども、失敗してログが出るとビビってしまう初心者of初心者なレベルです。
同じようなレベルで困っている方にログを示しながら、丁寧に解説することにより助けとなれば幸いです。（参考書や記事等をソースに書いております。）

解釈や理解が間違っていたら、ご指摘頂けると幸いです。

##環境
Rails6,ローカル環境

##git pushしたら ! [rejected] master -> master (fetch first) errorと言われる

```
zen_fumi$ git push origin master
To https://github.com/XXXXX.git
 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'https://github.com/XXXX/XXXX.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
```

以下の記事にこのログが出たらgit fetch && git merge origin/masterしてからpushすればOKと書いてあったのでそのように対処しました。
https://qiita.com/takanatsu/items/fc89de9bd11148da1438

```
zen_fumi$ git fetch
remote: Enumerating objects: 14, done.
remote: Counting objects: 100% (14/14), done.
remote: Total 26 (delta 14), reused 14 (delta 14), pack-reused 12
Unpacking objects: 100% (26/26), done.
From https://github.com/XXXX/XXXX
   a0a483e..b9b2fac  master          -> origin/master
   b16c768..87e5c6f  Like_function#5 -> origin/Like_function#5
zen_fumi$ git merge origin/master
Merge made by the 'recursive' strategy.
 README.md | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------
zen_fumi$ git push origin master
Enumerating objects: 34, done.
Counting objects: 100% (28/28), done.
Delta compression using up to 4 threads
Compressing objects: 100% (12/12), done.
Writing objects: 100% (13/13), 1.19 KiB | 611.00 KiB/s, done.
Total 13 (delta 9), reused 0 (delta 0)
remote: Resolving deltas: 100% (9/9), completed with 6 local objects.
To https://github.com/XXXX/XXXX
   b9b2fac..205a9cc  master -> master
```
コマンドはうまく入ったようですが、何が起きているのさっぱり。
基礎知識を入れて理解してみました。

###まず、git fetchとは何？[ノンプログラマーなMacユーザーのためのGit入門から引用]
>フェッチ(fetch)という操作を行うと、リモートブランチをリモート追跡ブランチに取得できる。そうすることで、リモートブランチの変更点をローカルブランチに反映する前に、リモートブランチの内容を確認できるわけです。確認後ローカルブランチにて反映してよければ、リモート追跡ブランチをローカルブランチにマージすればOKです。プルは、フェッチとマージという一連の処理を組み合わせたものです。

fetchによって、リモートで変更（READMEを編集）を反映させたリモートのmasterブランチをリモート追跡ブランチに取得できるんですね。

リモート追跡ブランチとは？と聞こえてきました。説明します。

###リモート追跡ブランチとは？[ノンプログラマーなMacユーザーのためのGit入門から引用]
>origin/masterのようにorigin/~となっているもので、リモートリポジトリではありません。(git branch -aでorigin/~を確認してみてください)
リモートリポジトリをローカルにコピーしたもので、そのブランチは「リモート追跡ブランチ」と呼ばれます。リモート追跡ブランチは読み取り専用のブランチでユーザが直接変更することはできません。

イメージしにくい方は、以下の記事を読むとよりイメージを理解することができました。
https://shinmedia20.com/git-remote-tracking

ややこしいですが、リモートリポジトリのリモートブランチを追跡しているローカルに存在しているブランチとでもいえるでしょうか。

##まとめ
概念を入れた上で一連の流れをまとめます。

ローカルからリモートにpushしようとしたが、まずGithubでREADME.mdを編集しmasterに反映させた部分をローカルに反映させる必要があった。
だから注意されました。

そして、ローカルに反映させる為に
リモート(Github)でREADME.mdを編集して反映させたリモートブランチをfetchによってリモート追跡ブランチに取得。
その後、git merge origin/masterにより、リモート追跡ブランチ(リモートで変更したmasterブランチが呼ばれている)をローカルブランチにマージします。（上の説明・記事を読めば origin/masterの意味が理解できますね）

以上です。マニアックでお役に立てる気がしませんが、参考になれば幸いです。