LoginSignup
9
5

More than 5 years have passed since last update.

GitHubのPull Requestのレビューの際にそのブランチの内容をマージした時のものを取得する

Posted at

概要

GitHub上のPull Request(以下、PR)をレビューする際に、そのPRを実際に動かして挙動を確認したい場面がある。しかしながらPRのHEADが最新のmaster(=マージ先ブランチの内容)を反映しているとは限らない。つまり本来であれば動作確認のためにローカルにPRのHEADにチェックアウトして、自分でマージコミットを作る必要があるが、実はリモートがGitHubであれば既にマージ先ブランチの内容を反映したマージ済みブランチを作ってくれている。しかし通常ではそこにアクセスしないようになっているので、そこにアクセスできるようにしたい。

変更内容

Git config を変更する

.git/config を編集し、 remote ブランチの fetch するものの中に以下の行を追加する。

.git/config
 [remote "origin"]
   url = git@github.com:windyakin/kosen-website-crawler.git
   fetch = +refs/heads/*:refs/remotes/origin/*
+  fetch = +refs/pull/*/merge:refs/remotes/pr/*

fetch してみる

$ git fetch -p
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 4 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (4/4), done.
From github.com:windyakin/kosen-website-crawler
 * [new ref]         refs/pull/21/merge -> pr/21
 * [new ref]         refs/pull/22/merge -> pr/22

この際の「21」や「22」はPRの番号(ID)のこと。

以降、 git fetch を行うと pr/[ID] にそのPRのマージ先のブランチがマージされたコミットが取得できるようになる。

checkout してみる

$ git checkout pr/21
Note: checking out 'pr/21'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch-name>

HEAD is now at e0ba4c3 Merge b826855ed0f0e16b2e432ff467372c87951d5323 into f60fff0e26671d935ed9e65e3f52a6bdd69ac1b0

HEAD を確認するとその PR の HEAD がマージ先ブランチにマージされた状態のブランチであることがわかる。

注意事項

  • PRがコンフリクトすると、そのコンフリクトを起こす直前までのマージコミットしか取れない
  • このままでは push はできない

参考にしたやつ

9
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
5