2014-01-22 135 views
1

我有2個分支「主」和「奴隸」,兩個分支做了很多變化。合併時,需要覆蓋某個文件夾,有些需要解決衝突,有些可以正常合併。我希望的是將它們逐個合併,逐個文件夾。按文件夾合併文件夾?

步驟1: 合併 「主」 到 「從」,所以檢出分支 「從」 ...

git checkout slave 

步驟2: FolderA,FolderB中,FolderC需要與文件夾覆蓋在「大師」,所以我所做的是...

git checkout master FolderA 
git checkout master FolderB 
git checkout master FolderC 
git commit -am "Overwrite with master" 
git push origin slave 

步驟3: FolderD,FolderE,FolderF是會有衝突的文件夾,我希望我可以做合併它們一個接一個。然後使用git合併工具來解決衝突,像...

(git merge master FolderD)? 
git mergetool 

但是,這會給我一個錯誤「致命的:‘FolderD’不指向提交」。

第4步: FolderG到FolderZ的變化沒有衝突,所以只是正常合併。

git merge master 

的矛盾將更加複雜,需要時間來解決,這就是爲什麼我希望做一個接一個,我該如何實現第3步,並能夠進行到第4步?

回答

1

這裏有一種方法,我會這樣做。嘗試一下,看看它是否做到了你想要的。

git checkout slave 
git merge master 
git checkout --theirs FolderA FolderB FolderC 
git add FolderA FolderB FolderC 

現在,您可以在狀態,因爲你的榜樣,在衝突將通過FolderZ留在FolderD,你可以解決和git add。這應該會給你你所要求的。

我看到的唯一直接問題是您希望一次解決一個文件夾衝突的聲明。這裏的問題是,Git的第一層是可以一次跨越多個文件夾的提交。

關於這種方法的一個好處是,Git的歷史得以維持,而你提出的做法都會破壞歷史,你會做一個新的,非合併,通過C.

提交的FolderA

另一種方法你可能想要探索的是使用git filter-branch來半自動地重寫分支中的每個提交。這將使您能夠選擇性接受和拒絕來自每次提交的更改,允許您按照您認爲合適的方式通過編程方式過濾FolderA到Z.看一看:

http://git-scm.com/book/ch6-4.html#The-Nuclear-Option:-filter-branch

+0

這將合併,然後覆蓋文件夾ABC,我沒有這樣做的原因是我的文件夾ABC包含XLS,JPG,ZIP,RAR ...類型的文件,這些二進制文件在git mergetool發生衝突時很麻煩。合併後失去歷史是可以的,合併後的「奴隸」分支是爲我開始一個新項目。謝謝,我會閱讀關於filter-branch的內容。 – Vogelsire

相關問題