私がフォークしているGitHub上のプロジェクトには、作成者がまだプルしていない、自分のフォークにプルしたい新しいプルリクエストがあります。
他のフォークからのプルリクエストを私のフォークに適用する簡単な方法はありますか?ここに私が行方不明のものはありますか?
私がフォークしているGitHub上のプロジェクトには、作成者がまだプルしていない、自分のフォークにプルしたい新しいプルリクエストがあります。
他のフォークからのプルリクエストを私のフォークに適用する簡単な方法はありますか?ここに私が行方不明のものはありますか?
回答:
あなたはそれを手動で非常に簡単に行うことができます:
他のフォークをリポジトリのリモートとして追加します。
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.>
git pull URL branchname
これはgithub Webページからも行うことができます。
私は、関心のあるフォーク()からの保留中のプル要求を持つMyFork
共通リポジトリ(BaseRepo
)のフォーク()をすでに持っているはずだと思いますOtherFork
。
OtherFork
したいプルリクエストを開始したフォーク()に移動します(MyFork
)に移動OtherFork
OtherFork
ブランチを選択することも忘れないでください。左側をベースフォークとして選択するyourフォーク(MyFork
)(重要)。View pull request
変わりますCreate pull request
。こちらをクリックしてください。これで、保留中のプルリクエストがフォーク(MyFork
)にあり、単純に受け入れることができます。
OtherFork
、右側の「比較」ドロップダウンから、によって行われたプルリクエストに対応するブランチを選択しました。次に、プルリクエストを作成できるため、上記のように左側をベースフォークとして選択しました。
以前にTekkubが言ったように、ブランチを直接プルすることができます。ほとんどの場合、GitHubの場合、ブランチはプロジェクトの要求側のユーザーフォークの単純な「マスター」です。
例: git pull https://github.com/USER/PROJECT/ BRANCH
そして実際的な例として:
safaribooksと呼ばれるgithubプロジェクトをフォークし、元のプロジェクトに次のプルリクエストがあり、フォークに入れたいとします。
次に、フォークのクローンプロジェクトフォルダーで、次を実行します。
git pull https://github.com/fermionic/safaribooks.git fix-str-decode
git pull https://github.com/{upstream/project} refs/pull/{id}/head
代わりに使用することをお勧めします。
プロジェクトのプルリクエストは多くの異なる作成者(フォーク)から送信される可能性があり、フォークごとに個別のリモートが必要になることはおそらくありません。また、プルリクエストを送信するときに作成者が使用したブランチや、作成者のマスターブランチにある可能性のあるブランチについて、何も想定しないでください。そのため、プルリクエストは、他のフォークに表示されるよりも、上流のリポジトリに表示されるように参照することをお勧めします。
ステップ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」を実行します。
refs/pull/
名前空間を示唆しています。 。
smartgit.branch.otherRefs=notes;pull
、syntevo.com / doc / display / SG / System + Propertiesに従ってsmartgit.propertiesに追加すると、これらのプルリクエスト(およびクローズされたもの)がロググラフに表示されます。そこからマージすることもできます。 。
これには、便利なダンディスクリプトを使用します。次のように入力してスクリプトを実行します。
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