275

GitHub リポジトリをフォークしました。次に、いくつかの変更をフォークにプッシュしました。次に、元のリポジトリが私の変更と他のいくつかの変更をマージしました。今、欠けている変更をマージしたいと思います。シンプルなプルに続いてプッシュを試みましたが、これによりコミットが重複してしまいます。それを行う最良の方法は何ですか?

4

2 に答える 2

370

おそらく、各リポジトリに「リモート」があります。1 つのリモートからプルし、別のリモートにプッシュする必要があります。

最初にフォークからクローンを作成した場合、そのリモートは「オリジン」と呼ばれます。まだ追加していない場合は、他のリポジトリを別のリモートとして追加する必要があります。

git remote add <shortname> git://github.com/<ownerName>/repo.git

それがすべて設定された後、実際にできるはずです(githubはデフォルトブランチをからmastermain変更し、必要に応じて変更します)

git pull <shortname> master
git push origin

は、とをこの順序git pullで実行するマクロにすぎないことを忘れないでください。他のリポジトリからコミットのリストを取得し、彼のブランチをツリーにマージするだけです。マージは、両方のブランチでのコミットで正しいことを行う必要があります。git fetchgit merge

GitHub は、その絶え間ない素晴らしさのすべてにおいて、もちろん近道を提供します。リポジトリのフォークには「早送り」ボタンがあり、反対側に完全にマージされた場合にフォークに追いつくために使用できます。

于 2009-07-14T03:46:36.623 に答える
81

したがって、上記の受け入れられた答えは、私にとっては完全には機能しませんでした。つまり、元の github 作成者へのリンクが機能していたときに失われ、その後は機能しなくなったようです。問題は、答えがリモート名とブランチの間の / を省略したことだと思います。そのため、リモートから master というブランチをフェッチしますが、それに対して何もできません。理由はよくわかりません。

github がサイトから推奨する方法は次のとおりです。

フォークされたレポを複製したら、前の回答で述べたように、元のレポへのリモート ポインティングを追加する必要があります。彼らはそれをアップストリームと呼びたがりますが、それは問題ではありません。

git remote add upstream git://github.com/octocat/Spoon-Knife.git

次に、フェッチします

git fetch upstream

マージ可能なバージョンが表示されます

From git://github.com/octocat/Spoon-Knife.git
 * [new branch]      gh-pages   -> upstream/gh-pages
 * [new branch]      master     -> upstream/main

次に、マージするブランチを選択するだけです。これらはローカルブランチではなく、リモートに保存されていることに注意してください。しかし、upstream/master (許可されている) というローカル ブランチがない場合は、以下の行で問題なくマージできます。

git merge upstream/main

または、次の行を使用して、(少なくとも最初のフェッチの後) フェッチ/マージをショートカットできます。

git pull upstream/main
于 2012-01-26T22:06:49.743 に答える