2016-09-21 598 views
1

我在我的git項目上有兩個分支:release和dev。我做了一張照片來展示結構和我想要的東西。git cherry-pick:解釋。它爲什麼會產生衝突和差異?

Hand-drawn graph of what I have and what I want

複製從Dev分支提交5號發佈的分支,我做了發佈分支櫻桃挑選。

  1. 爲什麼在發佈分支上挑選櫻桃時會出現衝突?

    摘櫻桃應用提交和共同祖先之間的差異,所以,在這種情況下,共同的祖先是犯數3.摘櫻桃應適用上發佈分支提交3相同的差異。發佈分支上的提交3後沒有任何內容,所以我不瞭解這些衝突。

  2. 在爲了化解矛盾,我用:

    git cherry-pick -X theirs commit5

    在發佈分支。

所以我的第二個問題是:爲什麼發佈分支上的提交5和開發分支上的提交5之間存在差異?

diff命令顯示出很大的分歧。使用選項-X theirs應該應用dev分支提交5的所有更改,否?

+0

什麼'櫻桃pick'選秀權是給定的提交,而*指定的提交*的母公司之間的差異。鑑於您的繪圖,如果你嘗試'混帳櫻桃採摘'的Git計算'git的差異'並應用到當前的承諾,不管它是什麼。 – torek

回答

0

git cherry-pick,據我所知,只是需要從提交的diff,並試圖將其應用到您的文件。這就是爲什麼會有一些衝突。

至於你的問題的第二部分,我並沒有真正得到你的意思。這兩個提交(我們稱他們爲5和5')有不同的基礎,因此應該是不同的(他們的不同,他們改變的行不同,等等)。 所有可應用的更改;將被應用。如果提交5引入了對提交3中不存在的文件的一些更改,那麼顯然不會在提交5中傳播。這也是爲什麼保持提交儘可能原子是一個好主意。

+0

是的,我同意git cherry-pick從提交中獲取差異並嘗試應用它。我認爲差異必須有一個參考點,對於我來說,櫻桃挑選採用共同的祖先提交(這裏是提交3)的差異。任何文件都沒有被修改,因爲發佈分支上的提交3,所以我仍然不明白爲什麼會出現衝突。/n感謝您的2D答案,我認爲櫻桃挑選添加新文件。在這裏我有一個java文件已經存在於提交3中,並且在提交5和5之後它們不同。我不明白爲什麼...... – Beretta

+1

好吧,對於初學者來說,在提交5之後,你可能會在這個文件中有提交4的更改。這些更改不會出現在提交5'中。或者,也許你希望你的項目在commit 5'和5之間看起來*完全相同,但只有一個提交?在這種情況下,合併+壁球就是你想要的,或櫻桃選擇多個單獨的提交(+壁球)。 – MayeulC

+0

櫻桃挑選從提交和它的直接前導之間引入的差異創建補丁,並將該補丁應用於當前分支並提交。合併將得到自共同祖先以來的所有變化。 – Gregg