かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

GitHub 特定のPRをForkしたローカルリポジトリに取ってきたい

ForkしているリポジトリにFork元のリポジトリに出されている特定のpull request(以下: PR)を取り込みたいという状況があったのでメモ。

元のリポジトリ: http://github.com/example/project
取り込みたいPR: http://github.com/example/project/pull/298

1. Fork元のリポジトリを登録する

root_branch という名前で登録します。

$ git remote add root_branch git://github.com/example/project.git

Pull Requestsを取り込む

PRを取得する方法は公式のヘルプを参考にすると下記の様な感じ

$ git fetch origin pull/<ID>/head:<BRANCHNAME>
$ git checkout <BRANCHNAME>

pullの次のIDはPRのID。GitHubのPRページのタイトルに#nnnと表示されている番号、取り込みたいPRのURLの末尾にも表示されている。今回の例だと pull/298 となる。
head:以降のBRANCHNAMEはPRをローカルにチェックアウトするブランチ名をかってに指定すればOK。自分が分かる名前にすればなんでも良いっぽい。

今回はFork元のPRを取り込みたいのでgit fetch originとしてもoriginはForkされたリポジトリを指すので、そこにはPRは出ていないので、1. で登録したFrok元のリポジトリfetchに指定する。

Fork元(roo_branch)に出ているPR pull/298fix_hogehoge_bug というブランチ名で取ってくる場合は下記のような手順

1. Fetchする

$ git fetch root_branch pull/298/head:fix_hogehoge_bug
[new ref]         refs/pull/298/head -> fix_hogehoge_bug

2. ブランチの確認

$ git branch
fix_hogehoge_bug
* master

ローカルにブランチができていればOK。

3. できたブランチにcheckoutする

$ git checkout fix_hogehoge_bug
Switched to branch 'fix_hogehoge_bug'

コードに出されているPRの内容が入っているはず。
わーい!
 

ForkしてあるローカルリポジトリにFork元のを取り込むのは、Fork元を登録して通常originとする箇所を自分で登録したFork元の名前に替えるのが少しハマりどころな気がします。


[参考]

入門Git

入門Git