331

誰かがフォークしたGitHubでホストされているプロジェクトがあります。彼らのフォークで、彼らは新しいブランチ「foo」を作成し、いくつかの変更を加えました。彼らの「foo」を私のリポジトリの「foo」という名前の新しいブランチにプルするにはどうすればよいですか?

彼らが私にプルリクエストを送信できることは理解していますが、このプロセスを自分で開始したいと思います。

次のように想定します。

  1. 彼らは私のプロジェクトをフォークしたので、両方のリポジトリは同じ「履歴」を共有します
  2. GitHubは彼らのプロジェクトが私のものからフォークされたことを示していますが、私のローカルリポジトリにはこの人のプロジェクトへの参照がありません。それらをリモートとして追加する必要がありますか?
  3. 「foo」というブランチはまだありません。最初に手動で作成する必要があるかどうかはわかりません。
  4. 私は間違いなくこれを私のマスターではなく別のブランチに引き込みたいと思っています。
4

7 に答える 7

453
git remote add coworker git://path/to/coworkers/repo.git
git fetch coworker
git checkout --track coworker/foo

これにより、ローカルブランチがセットアップされfoo、リモートブランチが追跡されますcoworker/foo。したがって、同僚がいくつかの変更を加えた場合、それらを簡単にプルできます。

git checkout foo
git pull

コメントへの回答:

かっこいい:)そして、そのブランチに独自の変更を加えたい場合は、「foo」から直接2番目のローカルブランチ「bar」を作成して、「foo」で直接作業するのではなく、そこで作業する必要がありますか?

私がお勧めしますが、新しいブランチを作成する必要はありません。foo直接コミットして、同僚にブランチを引っ張ってもらうのもよいでしょう。ただし、そのブランチはすでに存在しており、ブランチfooをそのアップストリームブランチとして設定する必要があります。

git branch --set-upstream foo colin/foo

colinリポジトリ(同僚のリポジトリからリモート)が同様の方法で定義されていると仮定します。

git remote add colin git://path/to/colins/repo.git
于 2011-05-04T14:17:35.347 に答える
149

いいえ、リモートとして追加する必要はありません。 それは面倒で、毎回行うのが面倒です。

彼らのコミットをつかむ:

git fetch git@github.com:theirusername/reponame.git theirbranch:ournameforbranch

これにより、名前が付けられたローカルブランチが作成されます。ournameforbranchこれは、それらのブランチとまったく同じtheirbranchです。質問の例では、最後の引数はですfoo:foo

:ournameforbranch自分のブランチの1つと競合しない名前を考えるのが面倒な場合は、一部をさらに省略できることに注意してください。その場合、と呼ばれる参照FETCH_HEADが利用可能です。あなたは彼らのコミットを見て、それから彼らのコミットをチェリーピックするgit log FETCH_HEADようなことをすることができます。cherry-picked

それらにそれを押し戻す:

多くの場合、あなたは彼らの何かを修正して、それをすぐに押し戻したいと思うでしょう。それも可能です:

git fetch git@github.com:theirusername/reponame.git theirbranch
git checkout FETCH_HEAD

# fix fix fix

git push git@github.com:theirusername/reponame.git HEAD:theirbranch

切り離された状態で作業することが心配な場合は、必ずを使用してブランチを作成し、上記を。:ournameforbranchに置き換えてください。FETCH_HEADHEADournameforbranch

于 2017-03-10T10:40:17.730 に答える
19

以下は、別のユーザーのフォークからPRブランチをチェックアウトするためにGitHubと連携する便利なソリューションです。プルリクエストID(GitHubがPRタイトルと一緒に表示する)を知っている必要があります。

例:

安全でないコードを修正する#8
アリスyour_repo:masterは1つのコミットをからにマージしたいher_repo:branch

git checkout -b <branch>
git pull origin pull/8/head

と異なる場合は、リモコンを代用してくださいorigin
正しい8プルリクエストIDに置き換えてください。

于 2018-11-11T05:51:29.293 に答える
18

antakの答えの場合:

git fetch git@github.com:<THEIR USERNAME>/<REPO>.git <THEIR BRANCH>:<OUR NAME FOR BRANCH> 

あなたにあげる:

Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

次に(Przemek Dのアドバイスに従って)使用する

git fetch https://github.com/<THEIR USERNAME>/<REPO>.git <THEIR BRANCH>:<OUR NAME FOR BRANCH>
于 2017-09-04T08:05:08.967 に答える
7

更新:GithubがUIを変更したため、これは機能しなくなったようです。復元されることを期待しましょう。


GitHubには、前述の回答に関連する新しいオプションがあります。PRからコマンドラインをコピーして貼り付けるだけです。

  1. PRの一番下までスクロールして、MergeまたはSquash and mergeボタンを表示します
  2. 右側のリンクをクリックしてください。view command line instructions
  3. 手順1の右側にあるコピーアイコンを押します
  4. ターミナルにコマンドを貼り付けます
于 2019-01-15T13:00:00.640 に答える
6

フォークされたリポジトリが保護されているため、直接プッシュできない場合、目標がfooに変更を加えることである場合は、次のようにブランチfooをリポジトリに取り込む必要があります。

git remote add protected_repo https://github.com/theirusername/their_repo.git
git fetch protected_repo 
git checkout --no-track protected_repo/foo

これで、アップストリームが関連付けられていないfooのローカルコピーができました。あなたはそれに変更をコミットする(またはしない)ことができ、それからあなたのfooをあなた自身のリモートリポジトリにプッシュすることができます。

git push --set-upstream origin foo

これで、fooがGitHubのリポジトリにあり、ローカルfooがそれを追跡しています。彼らがfooに変更を加え続ける場合、あなたは彼らをフェッチしてあなたのfooにマージすることができます。

git checkout foo 
git fetch protected_repo
git merge protected_repo/foo
于 2018-10-16T05:56:10.477 に答える
-1

git fetchアップストリームプル/<pr_number>/ head:<your_local_branch_name>

于 2021-11-26T12:10:31.507 に答える