0

この状況を考えてみましょう:

---A---B---C---D---E---F---G---H---I---J---  (master from upstream)
       \                    \
        D'--F'               J'              (releases from upstream)
             \
              P---Q                          (own branch)

独自のブランチをすべて J' にマージまたはパッチしたいと考えています。

P---Q がマスター ブランチの直系の子孫だった場合、私はあまり問題に遭遇しません。ただし、このユースケースでは、自分のブランチで触れられていないファイルに関連する多くのマージ競合が発生します。これらの競合は、この例の D'---F' 部分から発生しています。そこで、F'---Q から差分を生成し、これを J' に適用しようとしました。結果: 多くの適用エラー。別のアプローチである git-format-patch F'---Q と git am -3 -k のいずれも、効率的な解決策であるとは証明されていません。事実上、これはマージ ソリューションに匹敵します。リベースも試しました。繰り返しますが、私が触れていない多くのファイルがリベース プロセスで表示されます。

利用可能なクリーンなソリューションはありますか?

4

1 に答える 1

0

git format-patchによって生成されるコミットの数は、厳密に必要な数をはるかに超えていることに気付き始めました。これとformat-patchを処理することで、コミット範囲を小さくすることで、gitamの反復をはるかにうまく処理できるようになりました。何が起こっているのかを説明するために、グラフを拡張します。

---A---B---C---D---E---F---G---H---I---J---  (master from upstream)
    \   \                    \
     \   D'--F'               J'              (releases from upstream)
      \       \
       M---N---P---Q                          (own branch)

M--Nは、マスターに基づく以前のコミットでした。Pはマージされたコミットなので、

git format-patch F'..Q

その結果、パッチシリーズの履歴がはるかに深くなり(私の場合:約60)、非常に奇妙なgitamの反復が発生します。format-patch P --- Qを使用すると、約 30コミット(実際、P --- Qは単純化です)。これで、git amの反復により、P以降のコミットと明確な関係があり、管理しやすいgitmergetoolステップが生成されます。

于 2012-10-09T08:06:09.287 に答える