1

我被分配到两个项目,这两个项目都来自一个共同的父级,并且目标是大约在同一时间合并回父级。为简单起见,我们称它们为 master、projA 和 projB。

假设源代码的文件夹结构是:
/src/main/UI
/src/main/backend

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

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

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

所以在某些时候,projB 中可能需要对 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',但代价是当projA和projB都合并回master时,A1`和A1被视为单独的更改。

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

4

1 回答 1

1

编辑:

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

然后你创建你的分支projAprojBmaster. 您在 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 分支上,您通过运行合并后端提交“B1” git merge projB。结果是:

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

应该就是这样,您在 master 分支上的项目现在具有您想要的形式。我会考虑更多,看看是否有其他可能。

于 2012-09-25T10:05:43.197 回答