我被分配到两个项目,这两个项目都是从一个共同的父项派生的,并且目标是在同一时间合并回父项。 为简单起见,我们称之为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被视为单独的更改。
我希望有人可能有一个更好的计划,我仍然可以使用合并,这样我就不会有'重复'更改。
答案 0 :(得分:1)
编辑:
首先(只是为了确保),你的/src/main/backend/common/
应该在主分支中实现(并且可能在任何分支中编辑)。
然后,您从projA
创建分支projB
和master
。您在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分支上的项目现在有你想要的形式。我会更多地考虑一下,看看其他事情是否可能。