GitHubでFork/cloneしたリポジトリを本家リポジトリに追従する

  • 874
    いいね
  • 5
    コメント
この記事は最終更新日から1年以上が経過しています。

(興味深い手法があれば随時追加していきます at 2013/04/11)

ネットを検索すると、色々な手法が出てきますが、自分としては「WEB+DB PRESS plus 開発ツール徹底攻略」p.71 に載っていた以下の手法がシンプルで良く理解できました。

本家リポジトリの例として、実際にGitHubに存在する練習用リポジトリ git@github.com:DQNEO/Renshu.git を使います

あなた (youraccount) が既にForkしているRenshuリポジトリをcloneします。

$ git clone git@github.com:youraccount/Renshu.git
Cloning into 'Renshu'...
remote: Counting objects: 109, done.
remote: Compressing objects: 100% (70/70), done.
remote: Total 109 (delta 15), reused 109 (delta 15)
Receiving objects: 100% (109/109), 12.34 KiB, done.
Resolving deltas: 100% (15/15), done.    
$ cd Renshu

ブランチは以下のような状態になっているはずです (他にもあるかもしれません)。

$ git branch -a 
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

リモートリポジトリとして、オリジナルのリポジトリを upstream という名前で設定します。

$ git remote add upstream git://github.com/DQNEO/Renshu.git

以後、このリポジトリは upstream という名前で本家リポジトリを参照します。一度設定すれば再設定の必要は無いようです。

ブランチを確認すると、以下のように remotes/upstream/master が加わったことが分かります。環境によっては後述の git fetch upstream の操作を行った後で出てくる場合もありますので、出てこない場合には git fetch upstream を試した後に再度 git branch -a で確認してみてください。

$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/upstream/master

本家リポジトリの変更を取り出すためには fetchmerge の手順を取ります。

まずfetch

$ git fetch upstream
remote: Counting objects: 1, done.
remote: Total 1 (delta 0), reused 1 (delta 0)
Unpacking objects: 100% (1/1), done.
From git://github.com/DQNEO/Renshu
 * [new branch]      develop    -> upstream/develop
 * [new branch]      master     -> upstream/master

そしてmerge

$ git merge upstream/master
Updating fe579f8..a1e70ae
Fast-forward

変更が無い場合には "Already up-to-date." と表示されて終わりです。今回は差分があったので、コミットIDがfe579f8からa1e70aeまでの差分がmergeされました。

詳細は当該書籍を参照ください。