私がフォークしている GitHub のプロジェクトには、作成者がまだプルしていないフォークにプルしたい新しいプル リクエストがあります。
他のフォークから自分のフォークにプル リクエストを適用する簡単な方法はありますか? 私が行方不明になっているものは他にありますか?
私がフォークしている GitHub のプロジェクトには、作成者がまだプルしていないフォークにプルしたい新しいプル リクエストがあります。
他のフォークから自分のフォークにプル リクエストを適用する簡単な方法はありますか? 私が行方不明になっているものは他にありますか?
これは、github Web ページからも実行できます。
関心のある fork ( ) からの保留中のプル リクエストを持つMyFork
共通リポジトリ ( ) のfork ( ) が既にあるはずです。BaseRepo
OtherFork
OtherFork
) に入れたいプル リクエストを開始したフォーク ( ) に移動しますMyFork
。OtherFork
OtherFork
適切なブランチも選択することを忘れないでください。左側をベース フォークとして選択します ( MyFork
) (重要)。View pull request
変わるはずCreate pull request
です。これをクリックしてください。これで、保留中のプル リクエストが fork ( ) にあるはずですMyFork
。これを単純に受け入れることができます。
手動で非常に簡単に行うことができます:
リポジトリのリモートとして他のフォークを追加します。
git remote add otherfork git://github.com/request-author/project.git
彼のレポのコミットをフェッチする
git fetch otherfork
プル リクエストを適用するには 2 つのオプションがあります (1 を選択したくない場合)。
オリジンとプル リクエストの間に追加された最終的なコミットも適用することを気にしない場合は、プル リクエストが形成されたブランチをリベースできます。
git rebase master otherfork/pullrequest-branch
プル リクエストでコミットのみが必要な場合は、その SHA1 を特定して実行します
git cherry-pick <first-SHA1> <second-SHA1> <etc.>
前にTekkubが言ったように、ブランチを直接プルするだけです. ほとんどの場合、GitHub では、ブランチはプロジェクトの要求側ユーザーのフォークの単純な「マスター」です。
例:git pull https://github.com/USER/PROJECT/ BRANCH
そして実際の例として:
safaribooks という github プロジェクトをフォークし、元のプロジェクトにフォークに入れたい次のプル リクエストがあるとします。
次に、フォークのクローン プロジェクト フォルダーで、次を実行します。
git pull https://github.com/fermionic/safaribooks.git fix-str-decode
プロジェクトのプル リクエストは、さまざまな作成者 (フォーク) から来る可能性があり、フォークごとに個別のリモートは必要ないでしょう。また、作成者がプル リクエストを送信するときに使用したブランチや、作成者のマスター ブランチに他に何があるかを推測したくありません。したがって、プル リクエストは、他のフォークではなく、アップストリーム リポジトリに表示されているとおりに参照することをお勧めします。
ステップ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 = git@github.com: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
。変更が私のツリーを汚さないように。
オプションで、上記のようにcherry-pickを使用して、より望ましい場合は特定のコミットを選択できます。
幸せの旅 :)
これには、便利なダンディ スクリプトを使用します。次のように入力してスクリプトを実行します。
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