gitでGitHubプルリクエストをチェックアウトするにはどうすればよいですか?


251

以前に作成したプルリクエスト(GitHub Webインターフェイスを介して作成)をチェックアウトしたいと思います。refs / pullまたはrefs / pull / prの異なる場所を検索して見つけました

しかしfetch = +refs/pull/*/head:refs/remotes/origin/pr/*、git configファイルに追加してgit fetch すると

私は何を間違っていますか?GitHubはpull / xyzを自動的に作成する必要がありますか、それとも何かを設定する必要がありますか?


構成ファイルの完全なリモートセクションはどのように見えますか?



私はこの質問に終わりましたが、実際にはstackoverflow.com/q/1783405/2413303
EpicPandaForce

1
2番目の段落は完全な文ではありません。「しかし、私が追加すると...そしてgit fetchを実行する」-これらのことを行うとどうなりますか?
cp.engr

回答:


385

リモートPRをローカルリポジトリにフェッチするには、

git fetch origin pull/ID/head:BRANCHNAME

どこIDプル要求IDがあるとBRANCHNAME、作成したい新しいブランチの名前です。ブランチを作成したら、単純に

git checkout BRANCHNAME

詳細については、GitHub公式ドキュメントをご覧ください。


11
私はこれを使用して、上流のリポジトリからローカルのフォークされたリポジトリにprをフェッチします。originを上流に置き換えることもできます。
Jngai1297 2016

18
私のコマンドはgit fetch origin pull/1/head:githubusername、私が期待していたものではなく、のようになりました
Anthony

1
元に戻す方法は?
fico7489 2017

8
@Antoine BRANCHNAMEは、ブランチに名前を付けたいものです。すでに存在する名前(例:)を使用しようとしてmasterも機能しなかったと思います。ユーザー名を試してみましたが、その名前のブランチがなかったため、機能しました。おそらく私はあなたが言っていたことを誤解しています。
ナテオワミ2018年

1
ローカルリポジトリoriginを、フォークとupstream元のリポジトリ(help.github.com/articles/configuring-a-remote-for-a-forkなどを参照)を指すように構成した可能性があります。元のリポジトリからプルリクエストをフェッチする場合は、上記のコマンドでに変更originしてくださいupstream
mvlabat

126

これはブランチに名前を付ける必要なしにフェッチします:

git pull origin pull/939/head

自分のマシンで特定のプルリクエストを取得するにはどうすればよいですか?


これで十分です。tks–
rll

これは私にとってはうまくいきました。ティンボのフェッチメソッドは何か正しいことはしませんでした
malhal

30
たとえば、masterブランチでこれを行うと、このブランチに直接コミットされます。ステージングのためにプルリクエストを別のブランチに移動したい場合は、@ timboの回答を試してください。
フェニックス

3
@phoenixが言ったことを同上。プルリクエストブランチを自分のマシンのマスターではなく、独自のブランチの下に複製します。
Paul Chernoch

これは、後でプルリクエストからローカルブランチに変更をプルする場合にも機能します。
Luator

52

その要点は、git fetchを実行したときに何が起こったかを説明しています。

もちろん、github urlをプロジェクトのURLと一致するように変更してください。最終的には次のようになります。

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = git@github.com:joyent/node.git
    fetch = +refs/pull/*/head:refs/remotes/origin/pr/*

すべてのプルリクエストをフェッチします。

$ git fetch origin
From github.com:joyent/node
 * [new ref]         refs/pull/1000/head -> origin/pr/1000
 * [new ref]         refs/pull/1002/head -> origin/pr/1002
 * [new ref]         refs/pull/1004/head -> origin/pr/1004
 * [new ref]         refs/pull/1009/head -> origin/pr/1009
...

特定のプルリクエストをチェックアウトするには:

$ git checkout pr/999
Branch pr/999 set up to track remote branch pr/999 from origin.
Switched to a new branch 'pr/999'

問題259に記載されているさまざまなスクリプトがありますそのタスクを自動化するためににがあります。git -エキストラのプロジェクトでは、コマンドを提案(実装PR 262
git-pr

git-pr(1)-ローカルでプルリクエストをチェックアウトします

あらすじ

git-pr <number> [<remote>]
git-pr clean

説明

GitHubプルリクエスト番号に基づいてローカルブランチを作成し、後でそのブランチに切り替えます。

フェッチするリモートの名前。デフォルトはoriginです。

このプルリクエストチェックアウト226からorigin

$ git pr 226

remote: Counting objects: 12, done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 12 (delta 3), reused 9 (delta 3)
Unpacking objects: 100% (12/12), done.
From https://github.com/visionmedia/git-extras
  * [new ref] refs/pull/226/head -> pr/226
Switched to branch 'pr/226'

38

ローカルブランチを作成せずにフェッチしてチェックアウトし、HEADデタッチ状態にすることを好みます。ローカルマシンを不要なローカルブランチで汚染することなく、プルリクエストをすばやく確認できます。

git fetch upstream pull/ID/head && git checkout FETCH_HEAD

ここで、IDプル要求のIDであり、upstream元のプル要求が作成されている場合(それは可能性がありorigin、例えば、)。

お役に立てば幸いです。


1
私はこのソリューションが好きです。利点の1つは、PRがより多くのコミットで更新された場合、これを再度実行するだけで、新しいコミットを取得できることです。
Alex Johnson

14

Steven Pennyの回答を参照して、テストブランチを作成してPRをテストするのが最善です。だからここにあなたが何をするかです。

  1. PRをローカルにマージするテストブランチを作成します。あなたがマスターブランチにいると仮定します:

git checkout -b test

  1. PRの変更をテストブランチに取り込む

git pull origin pull/939/head:test

これで、このローカルテストブランチ(この場合はtestという名前)で変更を安全にテストできます。問題がなければ、通常どおりGitHubからマージできます。


1
ワークツリーを作成し、それを新しいtestブランチに設定してから、PRをプルします。これにより、ブランチをローカルに復元する必要がなくなります。私はワークツリーを処分します。実際、私はcheckout -bもう二度とないです-私はいつもワークツリーを作成してからブランチします。ディスクは安いです。もちろん、これを行うスクリプトがあります。必要なすべてのコマンドを個別に入力するわけではありません。
mpersico 2018年

11

Github.comを使用している場合は、「プルリクエスト」に移動し、関連するプルリクエストをクリックして、「コマンドラインの手順」リンクをクリックします。 Github.comでのコマンドラインの説明


たとえば、github.comを表示しているときに、PRの新しいファイルまたは変更されたファイルをダウンロードする方法は実際にあるのでしょうか。したがって、github上のリポジトリを表示しているときに、便利な「zipとしてダウンロード」ボタンをクリックするか、プロジェクトの各(全体)ファイルをクリックして、ファイル全体を確認することができます。PRの場合、クリックして「ファイルを確認する」方法を確認できません-どういう意味かわかりますか?何か不足していますか?乾杯!
Fattie 2017

9

git configコマンドを使用.git/configして、リポジトリからプルリクエストをフェッチする新しいルールを記述できます。

$ git config --local --add remote.origin.fetch '+refs/pull/*/head:refs/remotes/origin/pr/*'

そして、ただ:

$ git fetch origin
Fetching origin
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 4 (delta 2), reused 4 (delta 2), pack-reused 0
Unpacking objects: 100% (4/4), done.
From https://github.com/container-images/memcached
 * [new ref]         refs/pull/2/head -> origin/pr/2
 * [new ref]         refs/pull/3/head -> origin/pr/3

8

上記のオプションのいくつかの問題は、誰かがPRを開いた後にさらに多くのコミットをプッシュした場合、それらがあなたに最新のバージョンを提供しないことです。私にとって最も効果的だったのは、PRに移動して「コミット」を押し、一番下までスクロールして最新のコミットハッシュを確認し、 ここに画像の説明を入力してください 次にgit checkoutを使用するだけです。

git checkout <commit number>

上記の例では

git checkout 0ba1a50


2
git fetch origin pull/ID/head:BRANCHNAMEは、stackoverflow.com / a / 30584951/659732で言及されているアプローチでこの問題に正確にぶつかりました。解決策をありがとう!
joewiz 2017


5

Bitbucketの場合、単語pullをに置き換える必要がありますpull-requests

まず、git ls-remote originコマンドでプルリクエストのURLスタイルを確認できます。

$ git ls-remote origin |grep pull
f3f40f2ca9509368c959b0b13729dc0ae2fbf2ae    refs/pull-requests/1503/from
da4666bd91eabcc6f2c214e0bbd99d543d94767e    refs/pull-requests/1503/merge
...

ご覧のrefs/pull-requests/1503/fromように、refs/pull/1503/from

その後、任意の回答のコマンドを使用できます。


4

誤ってgit-extrasで提供されているものとほぼ同じものを書いてしまいました。したがって、他のコマンドをたくさんインストールするのではなく、単一のカスタムコマンドを使用する場合は、このgit-prファイルをどこかに配置して$PATH、次のように記述します。

git pr 42
// or
git pr upstream 42
// or
git pr https://github.com/peerigon/phridge/pull/1

4

「github fork」ワークフローに従っている場合は、フォークを作成してリモートアップストリームレポを追加します。

14:47 $ git remote -v
origin  git@github.com:<yourname>/<repo_name>.git (fetch)
origin  git@github.com:<yourname>/<repo_name>.git (push)
upstream        git@github.com:<repo_owrer>/<repo_name>.git (fetch)
upstream        git@github.com:<repo_owner>/<repo_name>.git (push)

現在のブランチを取得するには、コマンドは次のようになります。

git pull upstream pull/<pull_request_number>/head

新しいブランチにプルするには、コードは次のようになります。

git fetch upstream pull/<pull_request_number>/head:newbranch

3

Githubは最近、github-cliと呼ばれるcliユーティリティをリリースしました。インストール後、そのIDを使用してプルリクエストのブランチをローカルでチェックアウトできます

例えば: gh pr checkout 2267

このパッケージはまだベータ版であることに注意してください


1

リモートPRブランチをローカルブランチに取得します。

git fetch origin ‘remote_branch’:‘local_branch_name’

ローカルブランチの上流をリモートブランチに設定します。

git branch --set-upstream-to=origin/PR_Branch_Name local_branch

ローカルの変更をPRブランチに再度プッシュする場合

git push origin HEAD:remote_PR_Branch_name


0

あなたの起源と上流の情報が以下のようなものであるとします

   $ git remote -v
   origin  git@github.com:<yourname>/<repo_name>.git (fetch)
   origin  git@github.com:<yourname>/<repo_name>.git (push)
   upstream   git@github.com:<repo_owner>/<repo_name>.git (fetch)
   upstream   git@github.com:<repo_owner>/<repo_name>.git (push)

そしてあなたの支店名は

   <repo_owner>:<BranchName>

その後

   git pull origin <BranchName>

仕事をしなければならない


コードを共有する際は、コードについて説明してください
Yunus Temurlenk

-2

コミットがフォークされたリポジトリのマスターブランチにある場合は、次のようにすることができます。

git fetch git@github.com:<repo_owner>/<repo_name>.git
git checkout FETCH_HEAD
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.