2011-09-29 6 views
10

枝の違いをマージGitは - 私は BがCにマージされ、定期的にされた3つの分岐A、BおよびCを持っている

  o---o---o A 
     /
--------o---o---o---o---o---o B 
     \  \  \ \ 
      o---o---o---o---o---o C 

は、今私は、私はCで行った変更をマージしたいのですが、マージなしBの上からAの上。 gitでこれを行う最も簡単な方法は何ですか?

+1

ブランチあなたがそれをマージしたいためにと思いますか? –

+1

彼はAの上にそれを望んでいます – CharlesB

+1

Q、W(ブランチC)、E、R(ブランチB) - マージ - T、Y(ブランチC)ブランチCからQ、W、T、Yを選択すると、E、R(おそらくT、Yベースがオン)のコードが欠落しているために事態が壊れますか? –

答えて

8

git rebaseを使用してください。

まず、Bの上にあなたのCをリベース:すべてのCがBからAへの移植ブランチrebasedC今、私たちが望むB. のににコミット

git checkout C 
git checkout -b rebasedC#Let's do a new branch for it also, just in case 
git rebase B 

それが配置されます:

git rebase --onto A B rebasedC 

これで、rebasedCブランチのAの上にCコミットができました。 Aを早送りすることができます:

git checkout A 
git merge rebasedC 
git branch -d rebasedC# I don't think you would need it. 

これだけです。

+1

これはどのようにCで作られたBマージを取り除くのですか? – CharlesB

+3

Rebaseはそれを行います。次に、Bの上にコミットを移動します。明らかに、Cはマージをもう必要としないので、それらは削除されます。 – kan

+2

私はgitで試してみましたが、今私は木構造を持っています:http://files.rsdn.ru/20380/git.png(ここでは、Aブランチは 'master'という名前です)。 – kan

1

cherry-picking Cの非マージパッチを試すことができます。マージの競合を処理する準備をしてください。 :)

関連する問題

 関連する問題