Pull Request すると github 上では pull/xxx/head
と pull/xxx/merge
というブランチが作られる。
pull/xxx/head
は Pull Request を送ったブランチの head (最新状態)、pull/xxx/merge
はマージ対象のブランチとマージした結果の状態を持つブランチである。
それを手元に持ってきて操作することができる。
$ git fetch origin '+refs/pull/*:refs/remotes/pr/*'
* [new ref] refs/pull/1/head -> pull/1/head
* [new ref] refs/pull/1/merge -> pull/1/merge
* [new ref] refs/pull/10/head -> pull/10/head
... (abbrev)
チェックアウトするにはその後
$ git checkout -b foobar pull/10/head
とすればよい。手元に持ってきて動作確認する際に、pull request を送った人のレポジトリを git remote add しなくて良いので便利。
See also git current-branch, git fetch-pulls, git pull-dry-run など git alias ネタ
FYI: pull/xxx/merge の状態について
初期状態として pull/xxx/merge は Conflict が起きると作られない。
また、PullRequestをDraftで作った場合でもpull/xxx/merge は作成されない。
一度 pull/xxx/merge が作られた後に、Conflict がおきる commit を push すると、 Conflict しない場合は pull/xxx/merge
が更新され、Conflict した場合は pull/xxx/merge
が更新されない、という挙動をする。