はじめに
みなさん、GitHubでプルリクエストのコミット内容をcheckoutするとき、どのような方法でされていますか?
特にforkを多用する文化でブランチをcheckoutしようと思うと、ブランチはfork先のリポジトリにしか上がっていないため、remoteとしてfork先を登録してからcheckoutする必要があり面倒くさいですよね。
そこで、お使いの方も多いと思いますが、fork先を気にせずプルリクエストの内容をcheckoutする方法をまとめておきたいと思います。
プルリクエストをcheckoutする方法
方法1
この場合、チェックアウトをした後にdetached HEAD
状態になります。
つまり、HEADがブランチ以外のコミットオブジェクト(ポインタ)を指している状態になります。
この方法ではブランチが新規に作成されないので、git log
で差分を確認したりするだけの場合、非常に有用です。
git fetch origin pull/<IssueID>/head
git checkout FETCH_HEAD
方法1’
方法1の後にコミットをする必要がありブランチを切らなければならない場合、git switch
を使用してブランチを作成できます。
git fetch origin pull/<IssueID>/head
git checkout FETCH_HEAD
git switch -c new_branch
方法2
最初からブランチを切ることを決めている場合、この方法が有用です。
fetchの際に、方法1の内容に続けて:ブランチ名
と打つだけです。
こうすることによって、fetchのタイミングで(fetchしてきたコミットオブジェクトを参照する)ブランチが作成されます。
git fetch origin pull/<IssueID>/head:new_brach
git checkout new_branch
おまけ
以上の内容をテストするためだけのリポジトリをGitHubに上げていますので、試しに使ってみてください。
git clone https://github.com/ttksm/qiita-checkout-git-pr.git
cd qiita-checkout-git-pr
git fetch origin pull/1/head
...
さいごに
そういえばGitHubのデフォルトブランチの名前がmasterからmainに変更されましたね。
ブランチのプロテクションルールを追加する際に、ブランチ名指定をお間違えのないようご注意ください。