GitHub実践入門 (6)
プルリクはまだマージされてませんが先へ進みます
Fork元の変更を取り込むには
ここはfirst-prとは別のプロジェクトがサンプルになっているので試せます
そのかわりFork元が変更されないのでちょっと残念
first-prに何かマージされたらそっちでも試したい
Fork元を登録する
$ git remote add upstream Fork元のリポジトリURL
Fork元の更新を反映する
$ git checkout master
$ git fetch upstream
$ git merge upstream/master
upstreamというのはFork元のことなんですが
originとの関係はどうなっているのか
Fork元がupstreamでFork先がoriginということはわかるんですが
何かわかってないことがありそうな
あと、そういう名前をつけただけとかそういう名前がよく使われているというだけなのか
GitかGitHubで特別扱いされたキーワードでその名前にしておかないといけないのか
ブランチごとに設定されるのかプロジェクトでひとつなのか
ヘルプを見てみる
$ git fetch --help
...
When no remote is specified, by default the origin remote will be used,
unless there's an upstream branch configured for the current branch.
...
git fetchでfetch元を指定しない場合、現在のブランチに設定されたupstreamか、
upstreamがなければoriginが使われると
さっきの例で明にupstreamを指定してたのは、"現在のブランチに設定された"upstream"がないからか
originと同じく、デフォルトで使われる名前ってことだな
じゃあupstreamという名前にしておいたほうがいいわけか
あとブランチごとに設定されるものってこともわかった
一度git push -uでupstreamにpushするとその後はデフォルトでupstreamが使われるってことなんだろうな
$ git push --help
...
-u, --set-upstream
For every branch that is up to date or successfully pushed, add
upstream (tracking) reference, used by argument-less git-pull(1)
and other commands. For more information, see branch.<name>.merge
in git-config(1).
...
configで設定されるものなのか
どれどれ
$ git config -l | grep branch
branch.master.remote=origin
branch.master.merge=refs/heads/master
確かに今はmasterを指しているようだ
push -uすると、branch.master.remoteがupstreamになるんだろう
refs/heads/masterというのはmasterブランチの先頭ってことだな
これは.gitフォルダの下にあるものみたいだからついでに見てみよう
$ cat .git/refs/heads/master
d0dd1f61b33d64e29d8bc1372a94ef6a2fee76a9
$ git reflog
d0dd1f6 (HEAD -> master, upstream/master, origin/master, origin/HEAD) HEAD@{0}: clone: from https://github.com/koba925/Spoon-Knife.git
そのまんま書いてあるだけなんだな
だいたいわかった
たぶん
基本的にmasterブランチには最新コードを取り込むため、Forkした開発者自身がコードを修正することはあまりありません。
forkした自分のリポジトリのmasterブランチのことだよな
Pull Request出すときにmasterにマージしないで出してたから
いつマージするんだろうと思ってたけど
Fork元のリポジトリ(のmaster)にマージされてから自分のmasterにfetch/mergeするわけか
ブランチはずっとそのままってことだな