我有两个分支"master“和"slave",这两个分支都做了很多修改。合并时,有些文件夹需要覆盖,有些需要解决冲突,有些可以正常合并。我希望的是一部分一部分地合并它们,一个文件夹一个文件夹地合并。
步骤1:将"master“合并为"slave",因此我签出了分支"slave"...
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?
发布于 2014-01-22 16:30:41
这里有一个我会这么做的方法。试一试,看看它是否如您所愿。
git checkout slave
git merge master
git checkout --theirs FolderA FolderB FolderC
git add FolderA FolderB FolderC
现在,根据您的示例,您将处于这样一种状态:冲突将通过FolderZ和git add
保留在FolderD中。这应该会给你想要的东西。
我看到的唯一直接问题是您的声明,您希望一次解决一个文件夹的冲突。这里的问题是,Git的第一层是提交,它可以同时跨越多个文件夹。
这种方法的一个好处是,Git的历史被保留了下来,而您提出的方法将销毁历史,因为您将通过C为FolderA创建一个新的、非合并的提交。
您可能想要探索的另一种方法是使用git filter-branch
半自动重写分支中的每个提交。这将使您能够有选择地接受和拒绝来自每个提交的更改,允许您在认为合适的时候以编程方式过滤FolderA到Z。看一下:
http://git-scm.com/book/ch6-4.html#The-Nuclear-Option:-filter-branch
https://stackoverflow.com/questions/21277382
复制相似问题