我有两个分支“主”和“奴隶”,两个分支都做了很多改变。合并时,某些文件夹需要覆盖,有些需要解决冲突,有些可以正常合并。我希望将它们逐个部分地合并,按文件夹合并。
第1步: 合并“主”到“奴隶”,所以我结帐分支“奴隶”......
git checkout slave
第2步: FolderA,FolderB,FolderC需要用“master”中的文件夹覆盖,所以我做的是......
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 mergetool来解决冲突,比如......
(git merge master FolderD)?
git mergetool
但这会给我一个错误“致命:'FolderD'不指向提交”。
第4步: FolderG到FolderZ的更改没有冲突,所以只需正常合并。
git merge master
冲突将变得复杂,需要时间来解决,这就是为什么我希望一个接一个地做,我如何实现第3步并能够进入第4步?
答案 0 :(得分:1)
这是我做的一种方式。试一试,看看它是否符合您的要求。
git checkout slave
git merge master
git checkout --theirs FolderA FolderB FolderC
git add FolderA FolderB FolderC
现在你将处于一个状态,给出你的例子,在FolderD中你可以通过FolderZ解决冲突,你可以解决这个问题并git add
。这应该可以满足您的要求。
我看到的唯一直接问题是您的声明,您希望一次解决一个文件夹的冲突。这里的问题是Git的第一层是可以同时跨越多个文件夹的提交。
这种方法的一个好处是Git的历史记录得以维护,而您提出的方法会破坏历史记录,因为您将通过C对FolderA进行新的非合并提交。
您可能想要探索的另一种方法是使用git filter-branch
半自动重写分支中的每个提交。这将使您能够有选择地接受和拒绝每次提交的更改,允许您根据需要以编程方式过滤FolderA到Z.看看:
http://git-scm.com/book/ch6-4.html#The-Nuclear-Option:-filter-branch