GitHub リポジトリをフォークしました。次に、いくつかの変更をフォークにプッシュしました。次に、元のリポジトリが私の変更と他のいくつかの変更をマージしました。今、欠けている変更をマージしたいと思います。シンプルなプルに続いてプッシュを試みましたが、これによりコミットが重複してしまいます。それを行う最良の方法は何ですか?
2 に答える
おそらく、各リポジトリに「リモート」があります。1 つのリモートからプルし、別のリモートにプッシュする必要があります。
最初にフォークからクローンを作成した場合、そのリモートは「オリジン」と呼ばれます。まだ追加していない場合は、他のリポジトリを別のリモートとして追加する必要があります。
git remote add <shortname> git://github.com/<ownerName>/repo.git
それがすべて設定された後、実際にできるはずです(githubはデフォルトブランチをからmaster
にmain
変更し、必要に応じて変更します)
git pull <shortname> master
git push origin
は、とをこの順序git pull
で実行するマクロにすぎないことを忘れないでください。他のリポジトリからコミットのリストを取得し、彼のブランチをツリーにマージするだけです。マージは、両方のブランチでのコミットで正しいことを行う必要があります。git fetch
git merge
GitHub は、その絶え間ない素晴らしさのすべてにおいて、もちろん近道を提供します。リポジトリのフォークには「早送り」ボタンがあり、反対側に完全にマージされた場合にフォークに追いつくために使用できます。
したがって、上記の受け入れられた答えは、私にとっては完全には機能しませんでした。つまり、元の 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