2016-09-18 100 views
2

兩個分支masterfoo指向相同的根提交A.工作樹只有一個文件bar.txt如何提高這個git cherry-pick的衝突?

$cat bar.txt 
11111 
22222 
33333 
44444 
55555 

製作提交B到master,在bar.txt添加一行。

$cat bar.txt 
11111 
22222 
33333 
aaaaa 
44444 
55555 

然後使提交C至master,刪除aaaaabar.txt添加bbbbb別處。

$cat bar.txt 
11111 
bbbbb 
22222 
33333 
44444 
55555 

運行git format-patch -1 C以產生用於提交C中的補丁,假設它的名字是0001-bbbbb.patch

現在結帳foo。如預期的那樣,git am 00001-bbbbb.patchgit apply 00001-bbbbb.patch將由於衝突而失敗。但git cherry-pick C將成功,沒有任何問題。

從這個question我得知git amgit apply將與在這種情況下,參數-3--3way太成功。但是,我找不到關於git cherry-pick的三種合併方式的任何配置或參數。

問:

如何禁用git cherry-pick三路合併的事情在這種情況下,使摘櫻桃會失敗?

非常感謝。

+1

對於該修補程序,您可以嘗試調整上下文行數。 deafult是3,所以你會在上下文中發現變化的重疊。刪除到2個上下文行將允許22222 \ n33333對提供清晰的上下文。與此同時,Cherry-pick已經更多地瞭解你的回購,因此可以對合並基礎和上下文線做出明智的決定(合併策略的不同部分可以非常詳細以確保在可能時取得成功,並在不可能時報告衝突) –

+0

補充:你爲什麼要櫻桃採摘失敗? (而不是有一個正確成功的補丁?) –

+0

@PhilipOakley閱讀您的意見後我覺得我的期望是某種不合理的。如果當前上下文與修補程序相關的修補程序不同,那麼修補程序不能在沒有3way合併的情況下應用?我猜如果沒有3way合併,大部分選秀權都不會成功。 – ElpieKay

回答

1

使用git cherry-pick時,您可以指定合併策略。這裏列出的戰略如下:https://git-scm.com/docs/merge-strategies

編輯:octopus實際上不是在這種情況下,正確的合併策略,因爲它也失敗,一個有效的摘櫻桃(如@Elpiekay指出)

我不知道任何其他有效cherry-的選擇合併策略(和選項)將產生與上面的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

非常感謝您的回答。但是'章魚'似乎不適合這種情況。它涉及兩個以上的負責人。 'git cherry-pick --strategy = octopus B'也失敗了。所以這不可能是一個通用的解決方案。 – ElpieKay

+0

好吧,那很不幸!我不確定如果不用'git diff'或'git format-patch'和'git apply'來輸出結果,櫻桃就可以選擇你想要的方式。 – alexbclay