2016-09-18 24 views
2

2つのブランチmasterfooは、同じルートコミットAを指しています。作業ツリーには1つのファイルbar.txtしかありません。このgit cherry-pickの競合を起こす方法は?

$cat bar.txt 
11111 
22222 
33333 
44444 
55555 

bar.txtに行を追加し、masterにBをコミットしてください。

$cat bar.txt 
11111 
22222 
33333 
aaaaa 
44444 
55555 

次にaaaaaを削除し、他の場所bar.txtbbbbbを追加、masterにCをコミットします。

$cat bar.txt 
11111 
bbbbb 
22222 
33333 
44444 
55555 

実行git format-patch -1 C0001-bbbbb.patchように、その名前を想定し、Cをコミットのパッチを生成します。

チェックアウトfoogit am 00001-bbbbb.patchまたはgit apply 00001-bbbbb.patchは、予想どおりに競合が発生して失敗します。しかし、git cherry-pick Cは問題なく成功します。

このquestionから私はgit amまたはgit applyが、この場合、引数-3または--3wayであまりにも成功することを学びます。しかし、私はgit cherry-pickの3方向マージに関する設定や議論を見つけることができません。

質問:チェリーピックは失敗するように

、この場合にはgit cherry-pickための3ウェイ・マージの事を無効にする方法は?

ありがとうございます。

+1

このパッチでは、コンテキスト行の数を調整できます。嫌な人は3人なので、コンテキストライン全体で変更内容が重複して表示されます。 2つのコンテキスト行にドロップすると、22222 \ n33333ペアは明確なコンテキストを提供できます。一方、チェリーピックはあなたのレポについてさらに多くのことを知っているので、マージベースとコンテキストラインについて合理的な決定を下すことができます(できるだけ成功を保証するためにマージ戦略のさまざまな部分が詳細になり、そうでない場合は衝突の報告) –

+0

補足:チェリーピックが失敗する理由は何ですか? (適切に成功するパッチを用意するのではなく) –

+0

@PhilipOakleyあなたのコメントを読んだ後、私は私の期待がどうにか不合理だと感じます。現在のコンテキストがパッチが関連しているコンテキストと異なる場合、3ウェイマージなしでパッチを適用できないことは本当ですか?私は3wayマージなしでチェリーピックのほとんどはまったく成功しないだろうと思う。 – ElpieKay

答えて

1

git cherry-pickを使用する場合、マージ戦略を指定できます。利用可能な戦略は、https://git-scm.com/docs/merge-strategiesです。

編集:それはまた、有効なチェリーピックで失敗するのでoctopusは、私は他の有効なcherry-のいずれかわからないんだけど(@Elpiekayが指摘したように)

実際に、この場合の正しいマージ戦略ではありませんマージ戦略(およびオプション)を選択すると、上記のgit applyと同じ動作になります。私は間違っていると証明されてうれしいだろう!

I think you probably want octopus , so your command would be:

git cherry-pick --strategy=octopus C

When I tested it, it gave me this error:

error: could not apply 62f20c5... C

+1

お返事いただきありがとうございます。しかし、この場合、「タコ」は適当ではないようです。それは2つ以上の頭を扱う。 'git cherry-pick --strategy = octopus B'も失敗します。だからこれは一般的な解決策ではありませんでした。 – ElpieKay

+0

さて、それは残念です!私はチェリーにあなたが望む方法を 'git diff'または' git format-patch'とそれを 'git apply'でエクスポートせずに選択する方法があるのか​​どうかはわかりません。 – alexbclay

関連する問題