2016-11-12 56 views
1

我分叉了一個項目(來自分支A),似乎由於某種原因它在另一個分支(B)中繼續。從一個git分支移動到另一個只應用我的更改

我試圖將我的fork(M)與新分支(B)合併,但這導致了很多衝突。衝突是因爲新分支(B)分叉了較早的分支(O),並且A的部分更改未被分配給B.

現在我想將所有我的更改(在分支M中)與新支路B沒有衝突,取消由A在我的叉子M.

enter image description here

作出原點O的所有變化我要的是紅色。我怎麼做?

+0

我不關注正在發生的事情。你可以用分支圖來澄清你的問題嗎? –

+0

我添加了一個圖表,希望你能理解,我想要「分叉」B,以及我對分叉A所做的更改。 – prognoza

+0

我認爲你的意思是你在提交O和A之前提交了M但現在只想在B的頂部應用最後一個提交,它的圖中也有O,但與A和(當前)M位於不同的分支。在這種情況下,是否考慮過「櫻桃採摘」?您可能仍然需要解決一些衝突。 – jonrsharpe

回答

1

一個選擇是櫻桃採摘的A提交後發生的M分支提交的範圍,從B分支:

git checkout B 
git cherry-pick 2an38xma..f8s3kow2 

這裏2an38xma是SHA-1散列,或獨特的M分支中的A提交的標識符。您可以通過從A分支中輸入git log並向下滾動直至找到A提交來找到此提交哈希。在git cherry-pick中使用的範圍表示在之後提交提交直到M分支中的最終提交f8s3kow2

請記住,您可能會在每次提交時發生合併衝突。

+0

存在問題: 分叉分支(M)已與A合併幾次。 因此,這可能會產生很多問題。 有什麼可以幫助的是,只有一個用戶(我)在分叉分支(M)中提交。 – prognoza

+0

一般的解決方案不會改變。只需確定你想要的提交和櫻桃選擇他們。順便說一句,你的圖表是不夠的,因爲它不顯示多重合並。 –

+0

我們正在談論數以百計的變化......有沒有任何選擇來挑選我所有的提交? – prognoza

1

首先製作原M分支的副本git branch M.old M,這樣,如果事情最終不像您想要的那樣,您可以輕鬆地重新開始。

然後你就可以變基的M個轉移收受來自B開始

git rebase --onto B A M 

這應該給你圖紙完全相同的紅色M個轉移。

A這裏標記了您想要考慮更改的起點(不包括)以及端點(包括)的起點(包括),它們將被更新爲變形結果。

相關問題