两个带有通用代码的项目

时间:2012-09-21 00:05:04

标签: git git-merge git-cherry-pick

我被分配到两个项目,这两个项目都是从一个共同的父项派生的,并且目标是在同一时间合并回父项。 为简单起见,我们称之为master,projA和projB。

假设源代码的文件夹结构是:
/ SRC /主/ UI
/ SRC /主/后端

假设有一个文件,我们想在其中添加一个新的常见错误处理程序 这个功能应该在projA和projB之间共享 /src/main/backend/common/errorhandler.cpp

分支如下(两者都从主分支并最终合并回主人。 aN / bN是项目特定的更改。 AN / BN是更改errorhandler.cpp

       -- projA--a1-a2--A1--
      /                     \
------                       master
      \                     /
       -- projB--b1-b2--B1--

所以在某些时候projA中可能会有projA的变化,所以提交看起来像这样(比如说在将A1挑选到projB之后)。

       -- projA--a1-a2--A1--a3---
      /                          \
------                            master -- projA' -- projB'
      \                          /
       -- projB--b1-b2--B1--A1'--

从我读到的内容来看,我无法将A1合并到projB中。它会合并a1,a2和A1。

我可以使用cherry-pick,然后在projB中使用A1',费用为A1`,当projA和projB合并回master时,A1被视为单独的更改。

我希望有人可能有一个更好的计划,我仍然可以使用合并,这样我就不会有'重复'更改。

1 个答案:

答案 0 :(得分:1)

编辑:

首先(只是为了确保),你的/src/main/backend/common/应该在主分支中实现(并且可能在任何分支中编辑)。

然后,您从projA创建分支projBmaster。您在UI上使用projA分支,同时在projB分支的后端工作。到目前为止没问题。

你现在有A1,B1在各自的分支机构中提交。

      ---projA -- a1 -- a2 -- A1 
     /                          
----------------------------- master
     \                          
      ---projB -- b1 -- b2 -- B1

你想要的只是A1,B1而不是a1,a2,b1,b2。的确,我推荐樱桃挑选。樱桃挑选的一件坏事(其中包括)之后的历史并不好。但在你的情况下,我没有看到很多(甚至任何)其他可能性。

当您在主分支上(切换:git checkout master)时,运行git cherry-pick A1(A1为提交SHA),它将UI提交'A1'合并到主分支中:

      ---projA -- a1 -- a2 -- A1    
     /                             
------------------------- master ---- A1'
     \                          
      ---projB -- b1 -- b2 -- B1

然后,仍然在master分支上,通过运行git merge projB合并后端提交'B1'。结果是:

      ---projA -- a1 -- a2 -- A1    
     /                             
------------------------- master ---- A1' ---- B1'
     \                          
      ---projB -- b1 -- b2 -- B1

应该是这样,你在master分支上的项目现在有你想要的形式。我会更多地考虑一下,看看其他事情是否可能。