0

Progitでは次のように述べています。

競合を解決するために Git にもう少しインテリジェントに試行させたい場合は、-3 オプションを渡すことができます。これにより、Git は 3 者間マージを試行します。このオプションはデフォルトではオンになっていません。これは、パッチが基にしているコミットがリポジトリにない場合は機能しないためです。そのコミットがある場合 (パッチがパブリック コミットに基づいていた場合)、競合するパッチの適用に関しては、一般に -3 オプションの方がはるかに賢明です。

このアプローチのもう 1 つの利点は、コミットの履歴も取得できることです。正当なマージの問題があるかもしれませんが、彼らの仕事があなたの歴史のどこに基づいているかを知っています。-3を指定して、アクセスできるパブリックコミットからパッチが生成されたことを期待するのではなく、適切な3方向マージがデフォルトです。

では、プライベートコミットに基づいてパッチを適用できるということですか? パッチをコミットする際のファイルが貢献者の側に基づいていたため、マージ中に明らかな競合が発生するので、どのような意味があるのでしょうか?どうすればそれらを組み込むことができますか? これらのことは、プロジェクト メンテナーの観点から Progit で説明されているため、貢献者が開発の秘密のブランチに基づいてパッチを作成することはありません。

4

2 に答える 2

3

変更はプライベート コミットに基づいて簡単に行うことができ、変更が競合しない限り適用されます。

検討:

A                   master
\--------B-----C    HEAD

A はアップストリーム (パブリック) マスターです。B と C はプライベート ブランチへのコミットです。B から C へのパッチを生成できます。A..BB..Cが競合していない場合、アップストリームのパブリック コミット A に適用されます。

より丁寧な方法は、コミットの順序を変更することです。

A                   master
\--------C-----B    HEAD

そしてパッチを提出してA..Cください。これが不可能な場合 (たとえば、中間段階のコミットがローカルで公開されているため)、上流への提出用のパッチの準備専用のブランチにコミットをチェリーピックできるはずです。

A                   master
\--------B-----C    HEAD
\--------C'         upstream-request
于 2012-07-03T16:57:26.000 に答える
0

「プライベートコミット」とはどういう意味かわかりません。ローカルリポジトリでコミットしますか?それはほとんどの場合、パッチを送信する元のものです。

アップストリームに送信するコミットのみを含むパブリックブランチに基づいて、リポジトリにブランチを作成する必要があります。format-patchそのブランチからパッチを作成します。そうすれば、アップストリームはパッチを最も簡単に適用できます。

于 2012-07-03T16:49:00.057 に答える