web-dev-qa-db-ja.com

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

私は他の誰かのプロジェクトから分岐したプロジェクトのローカルブランチ( "configUpdate")を持っていて、それにたくさんの変更を加えましたそして彼らが行った変更を私のローカルブランチにマージしたいです。

私はもう試した

git pull --rebase Origin configUpdate

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

206
Martyn

ではどうでしょうか(現在configUpdateブランチにいると仮定して):

git fetch
git rebase Origin/master

手短に:

  • git merge branchnameはブランチbranchnameから新しいコミットを受け取り、それらを現在のブランチに追加します。必要ならば、自動的に "Merge"コミットを追加します。

  • 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(これはmergeを使用します)の場合、変更は自動的に作成されたmerge commitに加えて新しいcommitによって埋められます。

  • 代わりにあなたがgit pull --rebaseした場合、gitはあなたのマスターをアップストリームのものに早送りします、それから上にあなたの変更を適用します。

319
Joey Adams

私はそれがわかった:

$ git fetch upstream
$ git merge upstream/master
71
Martyn

最寄りの支店に切り替える

> git checkout configUpdate

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

> git rebase master configUpdate

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

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

リベースを続行

> git rebase - 続き

33
Serge Seletskyy

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

git checkout <local_branch>
git merge <master> 

あなたが私のような初心者であれば、これはgit merge vs git rebaseに関する良い記事です。 https://www.atlassian.com/git/tutorials/merging-vs-rebasing

12
AJC