3

プロジェクトを「フォーク」し、メンテナーの変更に連絡を取り合い、独自の機能を開発しながら、一度受け入れられた機能を簡単に貢献できるようにする最良の方法は何ですか?

これが私がやったことですが、問題が発生しました。

リポジトリのクローンを作成し、Feature1 ブランチでいくつかの作業を行った後、origin から、feature1 から、次に origin から変更をマージしました...次に、feature2 を開発しました。これにはもちろん、feature1 コードも含まれています。下のアートはシナリオを描いています (うまくいけば)。

マスターにすべてのアップストリームの変更があり、それらの上に開発しています。ただし、Feature1 のコードも含まれているため、Feature2 には貢献できません。私に何ができる?「aaa」に対する feature2 パッチを取得するには?

Feature2 をリベースし、cherry-pick して Feature1 のコミットを除外しますか? 解決策はあまりありません。

git format-patch f2..f4そしてgit am?すべてのパッチは手動で適用する必要があります。

          Feature1                                    Feature2
          a---b---c---d---e---f---g-----h---i         f2---f3---f4
         /                 \             \   \        /
    --------x'---y'---z'----1---o'---p'---2---3---q'-----r'---t'---l'---aaa'
     /     /    /    /        /    /             /      /    /    /
origin----x----y----z--------o----p-------------q------r----t----l---aaa
4

1 に答える 1

1

図に示されているマージワークフローを保持する場合。

git rebase --onto q Feature2
git checkout aaa
git merge Feature2

ダイアグラムを正しく理解していれば、ローカルリポジトリは次のように変換されます。

        Feature1
        a---b---c---d---e---f---g------h---i
       /                 \              \   \ 
      ------x'---y'---z'--1----o'---p'---2---3----aaa'
     /     /    /    /        /    /
origin----x----y----z--------o----p-------------q----r----t----l---aaa
                                                 \    \    \    \
                                                  \----r'---t'---l'---4---aaa''
                                                   \                 /
                                                    f2---f3---f4-----
                                                    Feature2

Feature2がFeature1で行われた変更のいずれにも依存しない場合は、それだけで済みます。Feature2がFeature1からのいくつかの変更に依存している場合は、それらの変更をFeature2ブランチにもチェリーピックする必要があります。

代替ソリューション

もう1つのアプローチは、すべてのマージを忘れて、Feature2を適切なアップストリームコミット(aaa)に直接リベースすることです。必要に応じて、Feature1でも同じことができます。

git rebase --onto aaa Feature1
git rebase --onto aaa Feature2

これにより、ローカルリポジトリは次のようになります。

                               a---b---(...)---aaa'   Feature1
                              /
origin---x---(...)---t---l---aaa
                              \
                               f2---f3---f4---aaa''   Feature2

繰り返しますが、これは、Feature2がFeature1に論理的に依存していない場合にのみ機能します。その場合でも、Feature1からFeature2にそれらを選択する必要があります。

于 2012-11-09T00:46:06.333 に答える