kb84tkhrのブログ

何を書こうか考え中です あ、あと組織とは関係ないってやつです 個人的なやつ

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するわけか
ブランチはずっとそのままってことだな