1

私は2つのプロジェクトに割り当てられています。どちらも共通の親から派生しており、ほぼ同時に親にマージされることを目標としています。簡単にするために、それらをmaster、projA、projBと呼びましょう。

ソースコードのフォルダ構造が次のようになっているとしましょう:
/ src / main / UI
/ src / main / backend

ファイルがあり、その中に新しい一般的なエラーハンドラーを追加したいとします。
この機能は、projAとprojBの間で共有する必要があります。
/src/main/backend/common/errorhandler.cpp

分岐は次のとおりです(マスターから分岐し、最終的にマスターにマージされます。aN/bNはプロジェクト固有の変更です。AN/BNは変更errorhandler.cppです。

       -- projA--a1-a2--A1--
      /                     \
------                       master
      \                     /
       -- projB--b1-b2--B1--

したがって、ある時点で、projBで必要なprojAの変更がある可能性があるため、コミットは次のようになります(たとえば、A1をprojBにチェリーピックした後)。

       -- projA--a1-a2--A1--a3---
      /                          \
------                            master -- projA' -- projB'
      \                          /
       -- projB--b1-b2--B1--A1'--

私が読んだことから、A1だけをprojBにマージすることはできません。a1、a2、およびA1をマージします。

projAとprojBの両方がマスターにマージされるときにA1`とA1が別々の変更として扱われることを犠牲にして、projBではA1'になるチェリーピックを使用できます。

私は誰かが私がまだマージを使用できるより良い計画を持っているかもしれないことを望んでいたので、私は「重複した」変更に終わらない。

4

1 に答える 1

1

編集:

まず(念のため)、/src/main/backend/common/マスターブランチに実装する必要があります(おそらく任意のブランチで編集する必要があります)。

projA次に、projBからブランチを作成しますmaster。UIのprojAブランチで作業すると同時に、projBブランチのバックエンドで作業します。今のところ問題ありません。

これで、それぞれのブランチでA1、B1がコミットされました。

      ---projA -- a1 -- a2 -- A1 
     /                          
----------------------------- master
     \                          
      ---projB -- b1 -- b2 -- B1

そして、必要なのはA1、B1だけで、a1、a2、b1、b2は必要ありません。確かに私はチェリーピックをお勧めします。チェリーピックの悪い点の1つは、その後の履歴が良くないことです。しかし、あなたの場合、他の可能性はあまりありません。

マスターブランチにいるとき(切り替えるには:)、git checkout master実行するとgit cherry-pick A1(A1はコミットSHA)、UIコミット'A1'がマスターブランチにマージされます。

      ---projA -- a1 -- a2 -- A1    
     /                             
------------------------- master ---- A1'
     \                          
      ---projB -- b1 -- b2 -- B1

次に、まだマスターブランチで、を実行してバックエンドコミット'B1'をマージしますgit merge projB。結果は次のとおりです。

      ---projA -- a1 -- a2 -- A1    
     /                             
------------------------- master ---- A1' ---- B1'
     \                          
      ---projB -- b1 -- b2 -- B1

これで、マスターブランチのプロジェクトが希望の形式になりました。他のことが可能かどうかを確認するために、もう少し考えます。

于 2012-09-25T10:05:43.197 に答える