2012-04-29 18 views
0

私は私のgitリポジトリに2つの支店を持っている:ローカルブランチとリモートブランチ間で変更をマージする方法はありますか?

capsule-os 
* remotes/m/ics 

カプセル-OSは、リモコン/ M/ICSの枝に私のローカルな変更とブランチです。私はcapsule-osブランチを使って作業しますが、リモート/ m/icのアップデートは時々実行されます。この変更を私のローカルブランチと同期したいと思います(実際にはこのリモートブランチに自分の変更を追加します)。私は何をすべきか?あなたのリモートを想定し

答えて

3

Amber's answerは正しいですが、私はそれがリベースではなく、マージの別のアプローチで答えを追加する価値があるかもしれないと思いました。

ブランチをまだ公開していない場合は、変更したm/icsブランチに変更をリベースすることができます。 :

# Make sure you're on the right branch: 
git checkout capsule-os 

# "Replay" all of your commits on top of m/ics, and update 
# capsule-os to point to the result: 
git rebase m/ics 

(あなたは、その後、いくつかの競合を解決する必要がある場合があります - あなたは簡単にそれを行うことができない場合、あなたはそれがgit rebase --abortで、もともとあったかに戻ってあなたのcapsule-os支店を置くことができます。)として

を、あなたが代替icsブランチの新しいバージョンを取得し、一度にその上にリベースすることができます

git pull --rebase m ics 

ありgit rebaseを使用してのさまざまな方法がたくさんがありますが、それらのすべては、基本的にセット0を取っ伴いますfコミットし、それらのそれぞれについて、コミットが他のコミットに加えた変更を再適用しようとします。これは頻繁に更新された上流ブランチにコミットのセットを "移動"させ、履歴を簡単に保つために使用されます。

"ブランチcapsule-osを公開していない場合"という理由でこれを認定した理由は、ブランチの履歴を書き換えると、そのブランチの元のバージョンで作業している共同作業者にとって困難が生じることです。しかし、依然として私的な仕事であれば、リベースはあなたの支店を上流に保ち、しかも歴史を簡単に保つ良い方法です。