私は他の誰かのプロジェクトから分岐したプロジェクトのローカルブランチ( "configUpdate")を持っていて、それにたくさんの変更を加えましたそして彼らが行った変更を私のローカルブランチにマージしたいです。
私はもう試した
git pull --rebase Origin configUpdate
しかし、それは最新の変更を把握していません - どうすれば2つをマージできますか? (また、ボーナスポイントのために私はpull --rebase
コマンドで何をしましたか?)
ではどうでしょうか(現在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はあなたのマスターをアップストリームのものに早送りします、それから上にあなたの変更を適用します。
私はそれがわかった:
$ git fetch upstream
$ git merge upstream/master
最寄りの支店に切り替える
> git checkout configUpdate
あなたのブランチにリモートマスターをマージする
> git rebase master configUpdate
衝突がある場合は、それらを修正し、衝突したファイルごとに次のコマンドを実行します。
> git add [path_to_file/conflicted_file](例:git add app/assets/javascripts/test.js)
リベースを続行
> git rebase - 続き
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