GitHubのフォークを同期するメモ

GitHubを使ってWebページを共同開発するとき、どんどん更新される上流リポジトリ（元のディレクトリやファイル）を、フォークした自分のGitHub上のリポジトリ、ローカルプロジェクト（自分のPCにクローンしたリポジトリ）に反映させる方法。

**改良版作りました。**mergeじゃなくてrebace使ってねと言われたら。中身も省略して分かりやすく。
[GitHub、作業前・プルリク前にpull-rebaseするメモ][link-kairyou]

ターミナルを使う。macOS catalina 10.15.4

##上流リポジトリを指定
既に指定されている場合はこうなる。

```
$ git remote -v
origin	https://github.com/自分のユーザー名/リポジトリ名.git (fetch)
origin	https://github.com/自分のユーザー名/リポジトリ名.git (push)
upstream	https://github.com/上流リポジトリのユーザー名/上流リポジトリ名.git (fetch)
upstream	https://github.com/上流リポジトリのユーザー名/上流リポジトリ名.git (push)
```

upstreamの欄が無い時は指定する。

```
$ git remote add upstream https://github.com/上流ユーザー名/上流リポジトリ名.git
```

##上流リポジトリから最新版を取ってくる

>上流リポジトリから、ブランチと各ブランチのコミットをフェッチします。
>[フォークを同期する](https://help.github.com/ja/github/collaborating-with-issues-and-pull-requests/syncing-a-fork)

上流リポジトリのファイルたちを取ってくる。

```
$ git fetch upstream
remote: Enumerating objects: 67, done.
remote: Counting objects: 100% (67/67), done.
remote: Compressing objects: 100% (21/21), done.
remote: Total 85 (delta 45), reused 65 (delta 45), pack-reused 18
Unpacking objects: 100% (85/85), done.
From https://github.com/上流ユーザー名/上流リポジトリ名
   5494987..ecffc86  master     -> upstream/master
```

SSLエラーが出る場合は再起動。

```
$ git fetch upstream
fatal: unable to access 'https://github.com/shataku/gourmet.git/': LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443 
```

##ローカルmasterブランチに移動

```
$ git checkout master
Switched to branch 'master'
```

```
$ git checkout master
Already on 'master'
Your branch is up to date with 'origin/master'.
```

##取ってきた最新版をローカルに同期してコミット

>upstream/master からローカル master ブランチに変更をマージします。 これによって、ローカルの変更を失うことなく、フォークの master ブランチを上流リポジトリと同期します。
>[フォークを同期する](https://help.github.com/ja/github/collaborating-with-issues-and-pull-requests/syncing-a-fork)

これでローカルのリポジトリに上流リポジトリの変更が反映されてコミットされる。

```
$ git merge upstream/master
Updating 533ff83..ecffc86
Fast-forward
 ファイル名と変更点がズラっと書いてある。省略。
```
このままだとローカルだけしか更新されてない。

##fetch+merge=pull
詳しくは**改良版**へ。[GitHub、作業前・プルリク前にpull-rebaseするメモ][link-kairyou]

```
$ git pull upstream master
```

##ローカルから自分のGitHub上へプッシュ
特別addしなくても既にcommitされてるみたい。
この通り。

```
$ git status
On branch master
Your branch is ahead of 'origin/master' by 23 commits.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean
```
なのでそのまま自分のGitHubにプッシュ。

<details><summary>remote add の設定
　一度でもプルリクしてたらリモートリポジトリも設定してると思う。</summary>
<div>

```
$ git remote -v
origin	https://github.com/自分のユーザー名/リポジトリ名.git (fetch)
origin	https://github.com/自分のユーザー名/リポジトリ名.git (push)
upstream	https://github.com/上流リポジトリのユーザー名/上流リポジトリ名.git (fetch)
upstream	https://github.com/上流リポジトリのユーザー名/上流リポジトリ名.git (push)
```

これでoriginが無い時は下記で設定。
（そんなことあるのか？どういう表記になるんだろうか？）

```
$ git remote add origin (https://自分のGitHubアドレス)
```

リモートURLの設定、詳しくは[GitHubにプッシュ・プルリクまでのメモ](https://qiita.com/414_cherry/items/c6803b44930965ff7398#git-remote-add)
</div></details>

設定できてればプッシュしてよし

```
$ git push origin master
Total 0 (delta 0), reused 0 (delta 0)
To https://github.com/ユーザー名/gourmet.git
   533ff83..ecffc86  master -> master
```

ブラウザでGitHubページ確認して、最新の上流リポジトリと同じ状態になってればよし。
開発する。
そしてプルリク。
[GitHubにプッシュ・プルリクまでのメモ](https://qiita.com/414_cherry/items/c6803b44930965ff7398)

##参考
[フォークにリモートを設定する](https://help.github.com/ja/github/collaborating-with-issues-and-pull-requests/configuring-a-remote-for-a-fork "GitHubヘルプ")
[フォークを同期する](https://help.github.com/ja/github/collaborating-with-issues-and-pull-requests/syncing-a-fork "GitHubヘルプ")

[link-kairyou]:https://qiita.com/414_cherry/items/71527f424340b27894e8