2014-01-17 64 views
0

前段時間我已經開始使用git svn。現在我在分支A中實現了一些特性,我想合併到分支B.分支A和B的結構如下:(注意,這不是項目意義上的子模塊)。git合併分支,但只接受對特定路徑的更改

A 
    /module0 
    /module1 
    . 
    . 
    . 
    /module15 
B 
    /module0 
    /module1 
    /module2 
    /module3 

分支B是從顛覆分支創建的新分支。

git checkout remote/... -b B 

這些模塊0-3的svn遠程分支和svn幹線(A)已經被年前分裂和手動補丁(沒有svn merge的信息),所以有許多變化。

我的目標是將從module0的一些更改從A合併到B.最好通過git合併,以便日後更容易合併將來的更改。我已經發現合併一個目錄不工作了,所以這裏是我做過什麼:

git checkout B 
git merge A 

導致HUUUUUUUUUUGE衝突和額外的12個模塊中的分支B.

我不確定如何正確地從這裏開始。

我已經git rm -rf moduleX所有不必要的模塊,並試圖獲得通過這些模塊

git checkout --ours /moduleX 

但混帳的報告依舊合併衝突,也有一些文件擺脫在module1-4變化的修飾,因爲它們只在A中更改,但我不想要這些更改。

Alternativly我想過櫻桃採摘,但這似乎也很痛苦。

回答

0

我認爲你的方法非常接近。我想改變git checkout閱讀:

git checkout HEAD -- moduleX 

這將檢查出的每一個文件的「我們的」版本,包括每一個成功的自動合併文件。我認爲使用--ours只會將「衝突」文件恢復到版本B。 (此外,您還可以使用BHEAD,較容易;他們解決相同的SHA-1,因爲你融入分支B使HEADB的另一個名稱而已。)

檢查git status經常根據需要確保您僅拍攝了您想要的部分。