2011-12-21 12 views
3

私はgit、master /と1.7 /に2つのブランチを持っています。チェリーピックを使用してmaster /から1.7 /にいくつかの修正をバックポートします。 (私は唯一の変更点のいくつかをしたいので、マージ使用していないよ。):私は、1.7 /(に入ってきたすべての変更をしたいので、チェリーをマスターからブランチにしてからブランチからマスターにマージするときに繰り返しコミットすることを避ける

$ git checkout 1.7 
$ git cherry-pick -x <initial commit SHA>..<master change 2 SHA> 

その後、後に、私は、1.7 /バックマスター/へのマージバックメインラインにマージする)チェリーピックthemeselvesを除く:

$ git checkout master 
$ git merge 1.7 

私の問題は、この再びマスター/へ)/元々マスターから(チェリーピックを再コミットすることです:

$ git log --oneline 
8ecfe22 Merge branch '1.7' 
fe3a60d master change 2 (cherry picked from commit f5cca9296e45d5965a552c45551157ba 
9c25f53 master change 1 (cherry picked from commit 8fae2a68a356f5b89faa8629b9a23b23 
f5cca92 master change 2 
8fae2a6 master change 1 
ffa10bf initial commit 

私の本当の再会それはマージの競合を引き起こしました。

私の質問は、これを避けることができますか?

この現象を再現するためのコマンドの完全なリスト:

$ git init 
<create Dialog.js file> 
$ git add Dialog.js 
$ git commit -am "initial commit" 
$ git branch 1.7 

<edit Dialog.js file> 
$ git commit -am "master change 1" 
<edit Dialog.js file> 
$ git commit -am "master change 2" 
$ git log 

$ git checkout 1.7 
$ git cherry-pick -x <initial commit SHA>..<master change 2 SHA> 

$ git checkout master 
$ git merge 1.7 
$ git log 

答えて

2

あなた桜のピック、あなたは早送りオプション-ffを使用していない限り、あなたは新しいコミットを作成しているし、あなたが戻ってマージするとき、Gitはしているにたとえ効果的にno-opsであっても、それらのコミットをマージすることができます。

リベースではなく、マージの、ここであなたを助けるかもしれない:(必要な場合。)今、その後

git rebase master 1.7 

と、ブランチをマージあなたは小さな変化を取得したいとき

チェリーピックが最高使用されていますあなたがそうでなければ捨てている枝から。ワークフローは、必要に応じてマージまたはリベースに基づいている必要があります。

+0

はい、私はrebaseの作業を想像することができますが、gitコミュニティでは、ブランチ上のrebaseを呼び出すことは死の罪とみなされます。 別の方法がありますか?私は "git merge"を使ってmaster /から1.7 /に変更を移すことができました。リベース-iに似た-iオプションのように?そして、もし私がそれをしたら、マスターからどの変更が来たのかを覚えておいて、後でそれらをマスターに再統合しようとしないでしょうか? –

+0

私は上記の "public *ブランチにrebaseを呼び出すのは死の罪とみなされます"と言っていた以上のものです。 –

関連する問題