web-dev-qa-db-ja.com

自分が所有していないブランチのマージされていないプルリクエストを取得するにはどうすればよいですか?

NServiceBusリポジトリで特定のプルリクエスト(まだメインストリームに処理されていない)をプルする必要があります。

https://github.com/johnsimons/NServiceBus/commit/d8524d53094e8181716e771c1023e968132abc15

それは明らかに私のレポではありませんが、そのプルリクエストに存在する変更が必要です。

これを行う最良の方法は何ですか?

66
user156888

リポジトリにプルを取得するには:

git fetch [email protected]:jboss/jboss-common-beans.git refs/pull/4/head

次に、FETCH_HEADで必要なことを行います。

git checkout -b new-branch FETCH_HEAD
73
wolfc
git pull Origin pull/28/head

または

git fetch Origin pull/28/head:28
git checkout 28

まだマージされていないプルリクエストをプルできますか?

54
Steven Penny

あなたはこれを行うことができます:

1)アップストリームリモートを追加します。

git remote add upstream [email protected]:Particular/NServiceBus.git

2)その後、IDごとに新しいブランチへのプルリクエストをチェックアウトできます。

git fetch upstream pull/PULL_REQUEST_ID/head:NEW_BRANCH_NAME

次に、NEW_BRANCH_NAMEという名前のブランチにPRコードが含まれます。

エイリアスの追加:

私と同じ頻度でこれを行う場合は、 一部のエイリアス をセットアップすることをお勧めします。私はこれを私の.gitconfigに持っています:

[alias]
    fetch-pr = "!f(){\
        [ -z \"$1\" ] && { echo Usage: git fetch-pr PULL_REQUEST_ID [REMOTE_NAME] [NEW_BRANCH_NAME]; exit 1; }; \
        remote=${2:-Origin}; \
        branch=${3:-pr-$1}; \
        git fetch $remote \"pull/$1/head:$branch\"; \
        }; f "
    pr = "!f(){\
        branch=${3:-pr-$1}; \
        git fetch-pr \"$@\"; \
        git switch $branch; \
        }; f "

上記により、私は次のことができます:

git fetch-pr 123              # fetch PR #123 into branch pr-123
git fetch-pr 123 some-branch  # fetch PR #123 into some-branch
git pr 123                    # fetch and switch to the branch
18
Elias Dorneles

困難な状況(特にgit-repoをチェックアウトしていない場合)の場合、最も簡単な方法はパッチを適用することだと思います。そのためには、githubでpull-requestを開き、URLに「.patch」を追加してダウンロードし、パッチを適用します。

例:

cd cordova-plugin-media
wget https://github.com/Apache/cordova-plugin-media/pull/120.patch
patch -p1 < 120.patch
8
cat

GitHubのこのヘルプ記事を参照してください: https://help.github.com/articles/checking-out-pull-requests-locally

5
David Phillips

github/hub

https://github.com/github/hub は、GitHub CLIヘルパーであり、GitHub APIからの追加情報を美しく使用して、このユースケースやその他のユースケースを処理します。例えば。:

git clone https://github.com/github/hub
# Just copy paste the URL.
hub checkout https://github.com/github/hub/pull/970

結果:

  • 現在、PRを含む<USERID>-<BRANCH_NAME>というブランチにいます。

    自動的に設定された適切なブランチ名に注意してください。

  • そのブランチは、フォークの元のブランチを追跡するように設定されています。つまり、.git/configには以下が含まれます。

    [branch "<USERID>-<BRANCH_NAME>"]
        remote = retronym
        merge = refs/heads/ticket/969
        rebase = true
    

    したがって、さらにコミットがプッシュされた場合は、直接git fetchできます。

Linuxにhubをインストールするのは、Goに慣れていないがそれだけの価値がある場合、現在は苦痛です。 Ubuntu 14.04では、リポジトリのGoは古すぎるため、 [〜#〜] gvm [〜#〜] が最適なオプションです。

bash < <(curl -LSs 'https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer')
. "$HOME/.gvm/scripts/gvm"
gvm install 'go1.4'
gvm use 'go1.4' --default
go get github.com/github/hub

また、GitHubにWeb UIのコピーペーストチートシートを提供するよう依頼しました: https://github.com/isaacs/github/issues/449

アップストリームリポジトリをアップストリームリモートとして追加したら(@eliasが指摘したように):

$ git remote add upstream [email protected]:Particular/NServiceBus

デフォルトでプルリクエストを取得するようにgitを設定できます:

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

それで、それを取得しましょう:

$ git fetch upstream
Fetching upstream
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/Particular/NServiceBus
 * [new ref]         refs/pull/1/head -> upstream/pr/1
 * [new ref]         refs/pull/2/head -> upstream/pr/2

そしてそれをチェックしてください:

$ git checkout pr/2
Branch pr/2 set up to track remote branch pr/2 from upstream.
Switched to a new branch 'pr/2'
3
SummerBreeze

ここに私のために働いたコマンドがあります。

私はすでにレポをクローンしていると仮定します(例えば pytorch )彼/彼女のシステムにローカルに。その後、ボランティア/愛好家が何らかのコードを提供し、リモートリポジトリにPRを発行しましたが、マスターまたは他のブランチにはまだマージされていません 。そう、

まず、git remote addgithubリモートリポジトリへ:

# I've given the name `original`; you can give some other name as per your liking
$ git remote add original https://github.com/pytorch/pytorch

次に、cdをリポジトリpytorchに入れてから、次のようにします。

# after this, the unmerged PR should be pulled to your local repo
$ git fetch original pull/<pull_number>/head    # 23, 123 etc.,

現在、保留中のPRはローカルリポジトリにfetchedされており、フェッチのヒントはFETCH_HEADにあります。この保留中のPRlocallyをマージする場合は、次のようにします。

$ git merge FETCH_HEAD

この後、あなたがするなら:

$ git status

ローカルリポジトリは、保留中のPRの一部であったnコミットよりも先にあることがわかります(つまり、1つのPRで複数のコミットを発行することが可能です)。したがって、コミットの数は、保留中のPRに含まれるコミットに依存します。

1
kmario23

以下は、「git fetch」コマンドを実行して、「git fetch」を実行するときにすべてのプルリクエストを取得することです。

以下を〜/ .gitconfigに追加します

[remote "Origin"]
fetch = +refs/pull-requests/*/from:refs/remotes/Origin/pr/*

参照「refs/pull-requests /」にはstashの命名規則があることに注意してください。gitハブの場合は、異なる形式が必要になる場合があります

0
Minnie Shi

Githubには、プルリクエストをlocalリポジトリにマージするための明確なドキュメントがあります。

https://help.github.com/en/articles/checking-out-pull-requests-locally

要するに、GitHubのプルリクエストは、ベースリポジトリ内のブランチであり、ブランチ名はシーケンス番号であることがわかります。上記の記事は、この番号を見つける方法と、任意のブランチ名でローカルリポジトリにプルするためのgitコマンドラインマジックを示しています。

プルリクエストをGitHubで作成したフォークにマージする同様の簡単な方法を見つけることができませんでした。

0
BobHy

他のリポジトリからマージされていないプルリクエストを自分のリポジトリに追加したいだけであれば、すべての複雑さは必要ありません(他の回答で示されているように)。

代わりに、自分のリポジトリに移動し、コミットハッシュを使用して(PRソースから)コミットをプルします。

git pull https://bitbucket.org/SomeUser/SomeProjectRepo/commits/c15...db2

このようにすると、まるで自分で編集したかのように、新しい編集済みファイルがたくさんできます。 commitこれらのタグ/ラベルを使用するかどうかはあなた次第です。

その後、すべてのニュースを自分のGitHubリポジトリにプッシュする場合は、いつものように実行します。

git commit -m "Added something by Anonymous"
git Push -u Origin master
0
not2qubit

この問題に対するこの解決策を見つけました-別のマシンでマージされていないPRから変更を取得し、git bash 1で次のことを行いました。マシン2でリモートリポジトリのクローンを取得している必要があります。 3. git pullを実行して完了!!!!!!!!!!!!!!

0
Waaheeda