GitHubでホストされているプロジェクトを持っていますが、これは誰かが分岐したものです。分岐点で、彼らは新しいブランチ "foo"を作成し、いくつかの変更を加えました。リポジトリの「foo」という名前の新しいブランチに「foo」をプルするにはどうすればよいですか?
プルリクエストを送信できることは理解していますが、このプロセスを自分で開始したいと思います。
以下を想定します。
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
いいえ、それらをリモートとして追加する必要はありません。それは面倒で毎回行うのが面倒です。
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_HEAD
とHEAD
をournameforbranch
に置き換えてください。
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>
フォークされたレポが保護されているため直接プッシュできない場合、目標はその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
GitHubには、前述の回答に関連する新しいオプションがあり、PRからコマンドラインをコピー/貼り付けするだけです。
Merge
またはSquash and merge
ボタンを表示しますview command line instructions
以下は、別のユーザーのフォークから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に置き換えます。