GitHubでのフォーク間のマージ


259

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

回答:


352

おそらく、リポジトリごとに「リモート」があります。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は、その永続的な素晴らしさで、ショートカットを提供します。リポジトリのフォークに「早送り」ボタンがあり、完全に反対側にマージされている場合に、フォークをキャッチするために使用できます。


1
これをリモート操作で完全に行う方法はありますか?私が正しく理解している場合、この方法では、すべての変更をローカルリポジトリにダウンロードしてから、アップロード(プッシュ)してgithubのフォークに戻します。私はむしろすべての変更をgithubのフォークに直接プルしたいだけです。
ケン劉

1
いいえ。Gitはそれをサポートしていません。幸い、Githubには現在、Webインターフェイスにマージボタンがあります。
cweiske

13
@cweiske-このマージボタンはどこにありますか?私は、すべての管理ページとメインページを見てきたが、それを見つけることができません。:(
アダム

2
@Adam、それはプルリクエストページにあります。したがって、フォーカーはプルリクエストを開いて、ブランチの1つをあなたのブランチにマージします。そこでマージボタンをクリックできます。
Rob Barreca

2
ボタン早送りはもう利用できないようです。詳細については、私は別の使用しているgitの私のコマンドの中にURLを:git remote add snaury git@github.com:snaury/script-runner
olibre

72

したがって、上記の受け入れられた答えは、私には完全にはうまくいきませんでした。つまり、元の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

問題は、すでに変更がある場合、組み込む変更によってマージコミットが作成されることです。場合によっては便利ですが、ほとんどの場合少し意味がありません。
パブロオルモスデアギレラC.

1
これらの場合、使用git rebaseする方がはるかにうまく機能し、醜い空のマージコミットを
除外します
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.