LoginSignup
1
3

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-05-15

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

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

ターミナルを使う。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

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

上流リポジトリから、ブランチと各ブランチのコミットをフェッチします。
フォークを同期する

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

$ 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 ブランチを上流リポジトリと同期します。
フォークを同期する

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

$ git merge upstream/master
Updating 533ff83..ecffc86
Fast-forward
 ファイル名と変更点がズラっと書いてある。省略。

このままだとローカルだけしか更新されてない。

fetch+merge=pull

詳しくは改良版へ。GitHub、作業前・プルリク前にpull-rebaseするメモ

$ 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にプッシュ。

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

$ 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にプッシュ・プルリクまでのメモ

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

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

ブラウザでGitHubページ確認して、最新の上流リポジトリと同じ状態になってればよし。
開発する。
そしてプルリク。
GitHubにプッシュ・プルリクまでのメモ

参考

フォークにリモートを設定する
フォークを同期する

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3