私がフォークを持っているGitHubのプロジェクトには、著者がまだプルしていない新しいプルリクエストがフォークにプルされます。
他のフォークからのプル要求をフォークに適用する簡単な方法はありますか?ここに私が行方不明になっているものが他にありますか?
非常に簡単に手動で行うことができます。
リポジトリのリモートとして他のフォークを追加します。
git remote add otherfork git://github.com/request-author/project.git
リポジトリのコミットを取得する
git fetch otherfork
その後、プルリクエストを適用する2つのオプションがあります(ピック1を選択したくない場合)。
Originとプルリクエストの間に追加された最終的なコミットも適用する必要がない場合は、プルリクエストが形成されたブランチをリベースするだけです
git rebase master otherfork/pullrequest-branch
プルリクエストでコミットのみが必要な場合は、SHA1を識別して実行します
git cherry-pick <first-SHA1> <second-SHA1> <etc.>
これはgithub Webページからも実行できます。
興味のあるフォーク(MyFork
)からの保留中のプルリクエストがある共通レポ(BaseRepo
)のフォーク(OtherFork
)が既にあるはずです。
OtherFork
)に入れるプル要求を開始したフォーク(MyFork
)に移動します。OtherFork
のプルリクエストページに移動しますOtherFork
ブランチも選択することを忘れないでください。左側のベースフォークをフォーク(MyFork
)として選択します(IMPORTANT)。View pull request
のオプションがCreate pull request
に変更されます。これをクリックしてください。これで、フォーク(MyFork
)に保留中のプルリクエストがあります。これを単に受け入れることができます。
前述のTekkubが言ったように、ブランチを直接引き込むことができます。ほとんどの場合、GitHubを使用すると、ブランチはプロジェクトのリクエスト元のユーザーフォークの「マスター」になります。
例:git pull https://github.com/USER/PROJECT/ BRANCH
プロジェクトのプルリクエストは、さまざまな作成者(フォーク)から送られてくる可能性があり、各フォークに個別のリモートが必要になることはおそらくないでしょう。また、プルリクエストを送信するときに作成者が使用したブランチや、作成者のマスターブランチに他にあるかもしれないものについて、仮定をしたくありません。したがって、プルリクエストは、他のフォークに表示されるのではなく、上流のリポジトリに表示されるように参照する方が適切です。
ステップ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
私のために働いたいくつかのより詳細な情報。
フォークされたレポの私の.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」を実行します
私がやることは次のとおりです。
git checkout master
git remote add #NAME# #ADDRESS TO REPO#
git fetch #USERNAME#
git checkout -b test_fork
git rebase #NAME#/#BRANCH#
変更をtest_fork
という名前のテストブランチにマージしました。そのため、変更によってツリーが汚れることはありません。
必要に応じて、上記のようにチェリーピックを使用して、特定のコミットを選択することができます。
幸せの旅 :)
これには便利なダンディスクリプトを使用します。次のように入力してスクリプトを実行します。
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