他の誰かのプロジェクトからフォークしたプロジェクト (「configUpdate」) のローカル ブランチがあり、それに多くの変更を加えたので、彼らが行った変更を自分のローカル ブランチにマージしたいと考えています。
私はもう試した
git pull --rebase origin configUpdate
しかし、最新の変更を取得していません - どうすれば2つをマージできますか? (ボーナスポイントについても、pull --rebase
コマンドで何をしましたか?)
機能ブランチ(例: 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 はマスターをアップストリームに早送りし、変更を一番上に適用します。
私はそれが次のことを知りました:
$ git fetch upstream
$ git merge upstream/master
ローカル ブランチに切り替える
> git チェックアウト configUpdate
リモート マスターをブランチにマージする
> git リベース マスター configUpdate
競合がある場合は、それらを修正し、競合するファイルごとにコマンドを実行します
> git add [path_to_file/conflicted_file] (例: git add app/assets/javascripts/test.js)
リベースを続行
> git リベース -- 続行