web-dev-qa-db-ja.com

マージされていないアップストリームプルリクエストを他のフォークから私のフォークに適用する方法は?

私がフォークを持っているGitHubのプロジェクトには、著者がまだプルしていない新しいプルリクエストがフォークにプルされます。

他のフォークからのプル要求をフォークに適用する簡単な方法はありますか?ここに私が行方不明になっているものが他にありますか?

428
leek

非常に簡単に手動で行うことができます。

  • リポジトリのリモートとして他のフォークを追加します。

    git remote add otherfork git://github.com/request-author/project.git
    
  • リポジトリのコミットを取得する

    git fetch otherfork
    
  • その後、プルリクエストを適用する2つのオプションがあります(ピック1を選択したくない場合)。

    1. Originとプルリクエストの間に追加された最終的なコミットも適用する必要がない場合は、プルリクエストが形成されたブランチをリベースするだけです

      git rebase master otherfork/pullrequest-branch
      
    2. プルリクエストでコミットのみが必要な場合は、SHA1を識別して実行します

      git cherry-pick <first-SHA1> <second-SHA1> <etc.>
      
262
CharlesB

更新:Webページ経由

これはgithub Webページからも実行できます。

興味のあるフォーク(MyFork)からの保留中のプルリクエストがある共通レポ(BaseRepo)のフォーク(OtherFork)が既にあるはずです。

  1. フォーク(OtherFork)に入れるプル要求を開始したフォーク(MyFork)に移動します。
  2. OtherForkのプルリクエストページに移動します
  3. 新しいプルリクエストをクリック
  4. 保留中のプルリクエストを提供する必要があります。適切なOtherForkブランチも選択することを忘れないでください。左側のベースフォークをフォーク(MyFork)として選択します(IMPORTANT)。
  5. これで、View pull requestのオプションがCreate pull requestに変更されます。これをクリックしてください。

これで、フォーク(MyFork)に保留中のプルリクエストがあります。これを単に受け入れることができます。

246
Hotschke

前述のTekkubが言ったように、ブランチを直接引き込むことができます。ほとんどの場合、GitHubを使用すると、ブランチはプロジェクトのリクエスト元のユーザーフォークの「マスター」になります。

例:git pull https://github.com/USER/PROJECT/ BRANCH

67
SciPhi

プロジェクトのプルリクエストは、さまざまな作成者(フォーク)から送られてくる可能性があり、各フォークに個別のリモートが必要になることはおそらくないでしょう。また、プルリクエストを送信するときに作成者が使用したブランチや、作成者のマスターブランチに他にあるかもしれないものについて、仮定をしたくありません。したがって、プルリクエストは、他のフォークに表示されるのではなく、上流のリポジトリに表示されるように参照する方が適切です。

ステップ1:

git remote add upstream <url>

おそらくこの手順は既に完了していますが、そうでない場合は、上流プロジェクトにリモートを定義する必要があります。 URLは、フォークしたプロジェクトのクローンURLです。詳細については、 フォークのリモートの設定 および フォークの同期 を参照してください。 upstreamはリモートに付ける名前であり、任意の名前を使用できますが、upstreamは従来の名前です。

ステップ2:

git pull upstream refs/pull/{id}/head

...ここで{id}はプルリクエスト番号です。 upstreamは、プルするリモートの名前です。つまり、ステップ1を正確に実行した場合は、単に「上流」です。 URLにすることもできます。その場合は、手順1をスキップできます。

ステップ3:

マージコミットのコミットメッセージを入力します。デフォルトを維持できますが、プルリクエスト番号、それが修正する問題、および簡単な説明を含むニースの1行の概要を提供することをお勧めします。

Merge PR#42, fixing VIM-652, support for mapping arbitrary IDEA actions
19
jbyler

私のために働いたいくつかのより詳細な情報。

フォークされたレポの私の.git/configファイルは次のようになります。

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
        ignorecase = true
        precomposeunicode = false
[remote "Origin"]
        url = [email protected]:litzinger/angular-carousel.git
        fetch = +refs/heads/*:refs/remotes/Origin/*
[branch "master"]
        remote = Origin
        merge = refs/heads/master
        rebase = true
[remote "source"]
        url = git://github.com/revolunet/angular-carousel.git
        fetch = +refs/heads/*:refs/remotes/source/*
        fetch = +refs/pull/*/head:refs/remotes/Origin/pr/*

次に、「git fetch source」を実行します。これにより、フォークされたレポからのすべてのプルリクエストがリストされます。

 * [new ref]         refs/pull/54/head -> Origin/pr/54
 * [new ref]         refs/pull/67/head -> Origin/pr/67
 * [new ref]         refs/pull/69/head -> Origin/pr/69
 * [new ref]         refs/pull/71/head -> Origin/pr/71

そして、特定のプルリクエストでマージするには、「git merge master Origin/pr/67」を実行します

19
Brian Litzinger

私がやることは次のとおりです。

git checkout master
git remote add #NAME# #ADDRESS TO REPO#
git fetch #USERNAME#
git checkout -b test_fork
git rebase #NAME#/#BRANCH#

変更をtest_forkという名前のテストブランチにマージしました。そのため、変更によってツリーが汚れることはありません。

必要に応じて、上記のようにチェリーピックを使用して、特定のコミットを選択することができます。

幸せの旅 :)

9
MindTooth

これには便利なダンディスクリプトを使用します。次のように入力してスクリプトを実行します。

git prfetch upstream

そして、アップストリームフォークからすべてのプルリクエストを取得します。

スクリプトを作成するには、ファイル~/bin/git-prfetchを作成します。

ファイルには次のものが含まれている必要があります。

#!/bin/bash

if [ -z "$1" ]; then
    echo "Please supply the name of a remote to get pull requests from."
    exit 1
fi

git fetch $1 +refs/heads/\*:refs/remotes/$1/\* +refs/pull/\*/head:refs/remotes/$1/pr/\*

以下を設定して、パスにスクリプトが含まれていることを確認します。

export PATH="$HOME/bin:$PATH"

このファイルを~/.bashrcに追加して、変更を永続的にすることができます。

次に、プルリクエストを取得するフォークを追加してください:

git remote add upstream https://github.com/user/repo.git

その後

git prfetch upstream
0
Richard