首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Git逐个文件夹合并?

Git逐个文件夹合并?
EN

Stack Overflow用户
提问于 2014-01-22 16:06:55
回答 1查看 450关注 0票数 1

我有两个分支"master“和"slave",这两个分支都做了很多修改。合并时,有些文件夹需要覆盖,有些需要解决冲突,有些可以正常合并。我希望的是一部分一部分地合并它们,一个文件夹一个文件夹地合并。

步骤1:将"master“合并为"slave",因此我签出了分支"slave"...

代码语言:javascript
运行
复制
git checkout slave

步骤2: FolderA,FolderB,FolderC需要用"master“中的文件夹覆盖,所以我所做的是...

代码语言:javascript
运行
复制
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来解决冲突,比如...

代码语言:javascript
运行
复制
(git merge master FolderD)?
git mergetool

但这会给我一个错误“致命:'FolderD‘不指向提交”。

步骤4: FolderG到FolderZ的更改没有冲突,所以只需正常合并即可。

代码语言:javascript
运行
复制
git merge master

冲突将是复杂的,需要时间来解决,这就是为什么我想一个接一个地做,我如何实现步骤3并能够继续到步骤4?

EN

回答 1

Stack Overflow用户

发布于 2014-01-22 16:30:41

这里有一个我会这么做的方法。试一试,看看它是否如您所愿。

代码语言:javascript
运行
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21277382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档