NServiceBusリポジトリで特定のプルリクエスト(まだメインストリームに処理されていない)をプルする必要があります。
https://github.com/johnsimons/NServiceBus/commit/d8524d53094e8181716e771c1023e968132abc15
明らかに私のリポジトリではありませんが、そのプルリクエストに存在する変更が必要です。
これを行うための最良の方法は何ですか?
NServiceBusリポジトリで特定のプルリクエスト(まだメインストリームに処理されていない)をプルする必要があります。
https://github.com/johnsimons/NServiceBus/commit/d8524d53094e8181716e771c1023e968132abc15
明らかに私のリポジトリではありませんが、そのプルリクエストに存在する変更が必要です。
これを行うための最良の方法は何ですか?
プルをリポジトリにフェッチするには:
git fetch git@github.com:jboss/jboss-common-beans.git refs/pull/4/head
次に、FETCH_HEAD で必要なことを行います。
git checkout -b new-branch FETCH_HEAD
あなたはこれを行うことができます:
1) アップストリーム リモートを追加します。
git remote add upstream git@github.com: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
困難な状況 (特に git-repo をチェックアウトしていない場合) の場合、最も簡単な方法はパッチを適用することだと思います。これを行うには、github でプル リクエストを開き、URL に「.patch」を追加してダウンロードし、パッチを適用します。
例:
cd cordova-plugin-media
wget https://github.com/apache/cordova-plugin-media/pull/120.patch
patch -p1 < 120.patch
GitHub/ハブ
https://github.com/github/hubは、GitHub API からの追加情報を使用して、このユース ケースやその他のユース ケースを美しく処理する GitHub CLI ヘルパーです。例えば:
git clone https://github.com/github/hub
# Just copy paste the URL.
hub checkout https://github.com/github/hub/pull/970
結果:
<USERID>-<BRANCH_NAME>
現在、PR を含むというブランチにいます。
自動的に設定された適切なブランチ名に注意してください。
そのブランチは、フォークの元のブランチを追跡するように設定されています。つまり、.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 にウェブ UI のコピー ペースト チートシートを提供するよう依頼しました: https://github.com/isaacs/github/issues/449
アップストリームリポジトリをアップストリームリモートとして追加したら(@eliasが指摘したように):
$ git remote add upstream git@github.com: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'
これは、GitHub ドキュメントのソリューションです。
プロジェクト リポジトリから新しいブランチをチェックアウトし、変更をテストします。
git checkout -b GithubUserID-branchName branchName
git pull https://github.com/GithubUserID/reponame.git branchName
どこ:
GithubUserID
プルリクエストを開いた人のユーザー名です。branchName
master などのブランチの名前です。reponame
demo-todo のようなリポジトリ名例 :
git checkout -b felix123-master master
git pull https://github.com/felix123/demo-todo.git master
Github には、プル リクエストをローカルリポジトリにマージするための明確なドキュメントがあります。
https://help.github.com/en/articles/checking-out-pull-requests-locally
要するに、GitHub のプル リクエストは、ブランチ名がシーケンス番号であるベース リポジトリの単なるブランチであるということです。上記の記事では、この番号を見つける方法と、任意のブランチ名でそれをローカル リポジトリにプルする git コマンド ライン マジックを示しています。
GitHub で作成したフォークにプル リクエストをマージする同様の簡単な方法が見つかりませんでした。