GitHubリポジトリをフォークしました。次に、いくつかの変更をフォークにプッシュしました。次に、元のリポジトリが私の変更と他のいくつかをマージしました。ここで、欠けている変更をマージしたいと思います。単純なプルに続いてプッシュを試しましたが、これによりコミットが重複して発生します。それを行うための最良の方法は何ですか?
GitHubリポジトリをフォークしました。次に、いくつかの変更をフォークにプッシュしました。次に、元のリポジトリが私の変更と他のいくつかをマージしました。ここで、欠けている変更をマージしたいと思います。単純なプルに続いてプッシュを試しましたが、これによりコミットが重複して発生します。それを行うための最良の方法は何ですか?
回答:
おそらく、リポジトリごとに「リモート」があります。1つのリモートからプルして、もう1つのリモートにプッシュする必要があります。
最初にフォークからクローンを作成した場合、そのリモートは「origin」と呼ばれます。まだ追加していない場合は、最初の人のリポジトリを別のリモートとして追加する必要があります。
git remote add firstrepo git://github.com/first/repo.git
それがすべてセットアップされたら、実際にできるはずです
git pull firstrepo master
git push origin
覚えておいてください、git pull
ないマクロ以外の何ものでもありませんgit fetch
し、git merge
そのためには、。最初の人のリポジトリからコミットのリストをフェッチして、ブランチをツリーにマージするだけです。マージは両方のブランチのコミットで正しいことをするはずです。
もちろん、GitHubは、その永続的な素晴らしさで、ショートカットを提供します。リポジトリのフォークに「早送り」ボタンがあり、完全に反対側にマージされている場合に、フォークをキャッチするために使用できます。
したがって、上記の受け入れられた答えは、私には完全にはうまくいきませんでした。つまり、元のgithubの作者とのリンクが失われたように見え、その後は機能しなくなったようです。問題は、答えがリモート名とブランチの間の/を省略したことだったと思います。そのため、リモートからマスターと呼ばれるブランチをフェッチしますが、それを使用して何も実行できません。なぜだかよくわかりません。
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/master
次に、マージするブランチを選択するだけです。これらはローカルブランチではなく、リモートに保存されていることに注意してください。しかし、upstream / masterと呼ばれるローカルブランチがない場合(許可されています)、以下の行とうまくマージする必要があります。
git merge upstream/master
別の方法として、次の行を使用して(少なくとも最初のフェッチの後で)フェッチ/マージをショートカットすることもできます。
git pull upstream/master
git rebase
する方がはるかにうまく機能し、醜い空のマージコミットを