分支之间的Git文件夹合并

时间:2014-11-12 12:37:47

标签: git-merge

我有2个分支

  1. |  _ folder1

    |  _ folder2

  2. 释放

    |  _ folder1

    |  _ folder2

  3. 两者都有相同的文件夹结构。

    如何只将1个文件夹从master分支合并到release分支,比如folder1

2 个答案:

答案 0 :(得分:0)

由于对两个文件夹的更改都是独立的,因此git方式是将更改保存在两个单独的分支中,而不是将它们提交到一个主分支。这将允许您只合并其中一个分支。

现在,你怎么能得到两个分支的状态? 在开发更改时,您将需要提交,即最后一次合并到发布中的提交。使用git log查找提交ID。这应该是master分支上的提交。然后在那里创建一个标签:

git checkout <commit id>
git tag begin_of_new_development

签出主分支并创建一个新的签出分支f1

git checkout master
git checkout -b f1

然后在新分支上使用交互式rebase删除与folder_1无关的提交:

git rebase -i begin_of_new_development

从列表中删除所有对folder_1无效的提交。

现在您应该留下一个分支f1,您可以将其合并到您的release分支中。如果对folder_2执行相同操作,则稍后可以将该更改合并到release中。但是,请注意,永远不要在f1f2中留下一个提交,因为rebasing会为它们提供新的提交ID,因此git无法知道它们包含相同的更改。此外,您无法再将master合并到release

答案 1 :(得分:0)

从评论中的讨论我假设两件事:

  • folder1folder2的变化是独立的。
  • 主分支上只有更改(至少到folder1)。

随后,以下说明将覆盖对发布分支上的folder1所做的任何更改。他们基本上将folder1中的文件从master复制到release

查看release分支。

git checkout release

然后,从master分支中检出folder1中的所有文件。这样做,将release留出已签出的分支。此外,所有这些文件都会添加到暂存索引中。

git checkout master -- folder1

提交更改。

git commit -m "Copy over changed files in folder1 from master branch."