Github:上流ブランチをフォークにインポート


169

githubのoriginプロジェクト(upstream)からフォーク()を持っています。これで上流プロジェクトに新しいブランチが追加されました。フォークにインポートしたいと思います。それ、どうやったら出来るの?

私はリモートをチェックアウトしてその上にブランチを作成しようとしましたが、それはブランチgit pushをにプッシュしようとしているように構成しますupstream

git checkout upstream/branch
git checkout -b branch

編集する

はっきりしないかもしれませんが、ローカルリポジトリにブランチを追加したいので、origin経由で(私のフォーク)にブランチをプッシュできますgit push。上流のリポジトリは通常読み取り専用であり、貢献するためにフォークするためです。

そのため、基本的には、存在しないブランチをチェックアウトし、originそのコンテンツをからプルしupstreamます。

回答:


262
  1. 新しい上流ブランチをローカルリポジトリにプルしたことを確認します。

    • まず、作業ツリーがクリーンであることを確認します(変更をコミット/スタッシュ/元に戻します)
    • 次に、git fetch upstream新しい上流ブランチを取得するには
  2. 新しい上流ブランチの作成およびローカルバージョンへの切り替え(newbranch):

    • git checkout -b newbranch upstream/newbranch
  3. 新しいブランチをoriginにプッシュする準備ができたら、次のようにします。

    • git push -u origin newbranch

-u指定されたリモートに追跡アップスイッチセット(この例ではorigin


6
私は信じてgit fetch upstreamいるので、最初のステップでは、より良い選択肢であるgit pull upstreamより多くのアクションが後に行われる必要がgit remote add ...ためupstream
アレクサンダーパブロフ2012

git pullアップストリームリターン:You asked to pull from the remote 'upstream', but did not specify a branch. Because this is not the default configured remote for your current branch, you must specify a branch on the command line.コマンドの最後にブランチ名を追加すると、新しいローカルブランチを作成する代わりに、アップストリームのブランチと現在のローカルブランチがマージされます。何か案は?
mMontu

1
に置き換えるgit pull upstreamgit fetch upstream問題が解決し、次の手順で問題が解決しました。
mMontu 2013

致命的:パスを更新することと、同時に「上流」のブランチに切り替えることはできません。コミットとして解決できない「アップストリーム/マスター」をチェックアウトするつもりでしたか?
sureshvv 2015

1
あなたが名前の上流のリポジトリへのリモート参照持っている必要があるため@sureshvvそれはおそらくだ上流ことのいずれかを実行する前に。そうでない場合は、それを追加する方法です:git remote addアップストリームyour_git_upstream_repository_url.git。その問題についての説明が必要な場合は、これを読んでください
Gabriel Rainha 2015年

7

私は使うだろう

git checkout -b <new_branch> upstream/<new_branch>

それは実際に私が質問で説明した前に試したものです。同じ結果になります。
突く

4

私もこれで問題があり、グーグルは私をここに連れて行ってくれました。しかし、解決策は機能しませんでした。私の問題は、アップストリームを追加したときに、すべてのブランチではなくマスターのみをフェッチするようにgit configを設定したことでした。例:こんな感じ

[remote "somebody"]
        url = git@github.com:somebodys/repo.git
        fetch = +refs/heads/master:refs/remotes/upstream/master

次のように.git / configを編集すると問題が解決しました

[remote "somebody"]
        url = git@github.com:somebodys/repo.git
        fetch = +refs/heads/*:refs/remotes/upstream/*

1

次の手順は私にとってうまくいきました(上流のブランチ名がであると仮定しますbranch):

$ git fetch upstream
$ git checkout branch
$ git push origin

1
git fetchの上流で致命的なエラーが発生する: 'upstream'はgitリポジトリの致命的ではないようです:リモートリポジトリから読み取れませんでした。正しいアクセス権があり、リポジトリが存在することを確認してください。
ThinkDigital 2018

0

--track

git branch --track branch upstream/branch

多分私はあなたの間違いを理解しましたが、そうすることで同じようにブランチがセットアップされます。と間をpushあけてupstream
突く

いいえ、私はあなたを誤解したと思います。
troelskn 2010

0

もう少し複雑なシナリオがありupstream、(正規リポジトリからの)フォークにすでに定義されていましたが、別のフォークからブランチをチェックアウトする必要がありました。そのためには、プロセスが少し異なります。これが私が終わった設定です:

[remote "origin"]
url = git@github.com:<your_user/org>/<repo>.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
rebase = true
[remote "upstream"]
url = git@github.com:<upstream_user>/<repo>.git
fetch = +refs/heads/*:refs/remotes/upstream/*
[remote "other_user"]
url = git@github.com:<other_user>/<repo>.git
fetch = +refs/heads/*:refs/remotes/<other_user>/*

これで、ブランチを<other_user>フォークからチェックアウトすることもできます。

git fetch <other_user> <branch>
git checkout -b <branch> <other_user>/<branch>

これにより、フォークから派生したローカルブランチが得られます。

そのローカルブランチをプッシュするには、pushコマンドで具体的に指定する必要がありました。

git push origin <branch>

これは受け入れられた回答とほとんど同じですが、フェッチしているリモートが「上流」と呼ばれていないだけです。
突く
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.