web-dev-qa-db-ja.com

他の誰かのリポジトリからリモートブランチをプルする方法

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

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

以下を想定します。

  1. 彼らは私のプロジェクトを分岐させたので、両方のリポジトリは同じ「歴史」を共有しています
  2. GitHubは彼らのプロジェクトが私のプロジェクトから分岐したことを示していますが、私のローカルリポジトリにはこの人のプロジェクトへの参照はありません。彼らをリモートとして追加する必要がありますか?
  3. 「foo」というブランチはまだありません。最初に手動で作成する必要があるかどうかはわかりません。
  4. 私は間違いなく、これを私のマスターではなく、別のブランチに取り込むことを望みます。
226
Colin O'Dell
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
291
ralphtheninja

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

コミットを取得する:

git fetch [email protected]:theirusername/reponame.git theirbranch:ournameforbranch

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

注:自分のブランチの1つと競合しない名前を考えるのが面倒な場合は、:ournameforbranch部分をさらに省略することができます。その場合、FETCH_HEADと呼ばれる参照が利用可能です。 git log FETCH_HEADでコミットを確認し、cherry-pickedのようなことをしてコミットを選択します。

それらに押し戻す:

しばしば、あなたは彼らの何かをfixして、すぐに押し戻したいと思うでしょう。それも可能です:

git fetch [email protected]:theirusername/reponame.git theirbranch
git checkout FETCH_HEAD

# fix fix fix

git Push [email protected]:theirusername/reponame.git HEAD:theirbranch

detached state で作業する場合は、必ず:ournameforbranchを使用してブランチを作成し、上記のFETCH_HEADHEADournameforbranchに置き換えてください。

77
antak

Antakの答え:

git fetch [email protected]:<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>
6
Peter

フォークされたレポが保護されているため直接プッシュできない場合、目標はその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
2
J Smith

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

  1. PRの一番下までスクロールして、MergeまたはSquash and mergeボタンを表示します
  2. 右側のリンクをクリックします:view command line instructions
  3. 手順1の右側にあるコピーアイコンを押します
  4. ターミナルにコマンドを貼り付けます
0
Robert Monfera

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

例:

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

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

Originと異なる場合は、リモートを置き換えます。
8を正しいプルリクエストIDに置き換えます。

0
Subfuzion