リモートマスターをローカルブランチにマージする方法


238

他の誰かのプロジェクトからフォークしたプロジェクトのローカルブランチ( "configUpdate")があり、そのプロジェクトに大量の変更を加えたため、ローカルブランチに加えた変更をマージしたいと考えています。

私はもう試した

git pull --rebase origin configUpdate

しかし、最新の変更を取得していません。どうすれば2つをマージできますか?(ボーナスポイントについても、pull --rebaseコマンドで何をしましたか?)


回答:


354

機能ブランチ(例:)から次をconfigUpdate実行:

git fetch
git rebase origin/master

または短い形式:

git pull --rebase

これが機能する理由:

  • git merge branchnameブランチから新しいコミットを取得branchnameし、現在のブランチに追加します。必要に応じて、「マージ」コミットが自動的に追加されます。

  • git rebase branchnameブランチから新しいコミットを取得し、branchname変更の「下」にそれらを挿入します。より正確には、現在のブランチの履歴を変更して、に基づいてbranchname変更を加えます。

  • git pull基本的にと同じgit fetch; git merge origin/masterです。

  • git pull --rebase基本的にと同じgit fetch; git rebase origin/masterです。

なぜあなたは使用したいgit pull --rebaseのではなくgit pull?以下に簡単な例を示します。

  • あなたは新しい機能に取り組み始めます。

  • 変更をプッシュする準備ができるまでに、いくつかのコミットが他の開発者によってプッシュされています。

  • あなたの場合はgit pull(マージを使用しています)、変更がコミット自動的に作成されたマージに加えて、新しいコミットによって埋葬されます。

  • あなたの場合はgit pull --rebase代わりに、Gitは速く、上流のにご主人を転送しますその後、上にあなたの変更を適用します。


私は正しいブランチでこれを行いましたが、ローカルファイルと元のプロジェクトのリモートマスターブランチの違いをまだ確認できます(すべてが最新であると表示されていても)。確認する方法はありますか?
Martyn、2011

1
@マーティン:違いはあなたのローカルの変更でなければなりません。リモートブランチの別のフォークを作成し、そのフォークに正しいファイルコンテンツがあるかどうかを確認します。
ZeissS、2011

4
私はこれが古い答えであることを知っていますが、リベースの代わりにMERGEを実行することを好むかもしれないことに注意してください。後でいくつかの変更を加えたリモートリポジトリにマージする必要がある場合は、リベースを実行する必要はありません。
ドミノ

1
どうですか(現在、configUpdateブランチを使用している場合)... git pullは基本的にgit fetchと同じです。git merge origin / master。<-NOT TRUE
Chris

@クリス:それはどんな意味で真実ではないのですか?上流としてのオリジン/マスターの仮定?またはgit pullが変更されましたか?
ジョーイアダムス

81

私はそれがそうであることを発見しました:

$ git fetch upstream
$ git merge upstream/master

6
だから、もしあなたがまだそれを理解していなければ、あなたのフォークを指していたpull --rebaseのであなたは働かなかったorigin。あなたがやればそれはうまくいったでしょうgit pull --rebase upstream/master
カールビーレフェルト

3
試してください:git merge origin / master
Chris

私はフェッチを逃していた、この答えは私のためにそれを解決しました。
ヌレッティン

39

ローカルブランチに切り替えます

> git checkout configUpdate

リモートマスターをブランチにマージする

> git rebase master configUpdate

競合がある場合は、それらを修正し、競合するファイルごとに次のコマンドを実行します。

> git add [path_to_file / conflicted_file](例git add app / assets / javascripts / test.js)

リベースを続行

> git rebase-続行


マージの代わりにリベースを使用することを恐れないでください。この質問にギャップがあると感じた場合は、違いを調査するためにしばらく時間をかけてください
Serge Seletskyy

13

git rebaseがうまくいかなかったようです。git rebaseの後で、ローカルブランチに変更をプッシュしようとすると、エラーが発生し続けます(「ヒント:現在のブランチの先端がリモートのブランチの背後にあるため、更新が拒否されました。リモートの変更を統合してください(例: 'git pull。 .. ')もう一度押す前。 ")git pullの後でも。最終的に私のために働いたのはgit mergeでした。

git checkout <local_branch>
git merge <master> 

私のような初心者であれば、git mergeとgit rebaseの良い記事を以下に示します。 https://www.atlassian.com/git/tutorials/merging-vs-rebasing

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.