Git合并文件夹按文件夹?

时间:2014-01-22 08:06:55

标签: git git-branch

我有两个分支“主”和“奴隶”,两个分支都做了很多改变。合并时,某些文件夹需要覆盖,有些需要解决冲突,有些可以正常合并。我希望将它们逐个部分地合并,按文件夹合并。

第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步?

1 个答案:

答案 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