方案如下。我将使用t1,t2,t3等表示不同的时间:
我有两个分支代表我的环境DEV分支,MASTER分支。
t1:我从MASTER创建了Feature_001分支
t2:我在Feature_001分支中添加了提交,并将我的代码合并到DEV中并推送了它。
t3:出于某种原因,我的经理告诉我停止Feature_001分支的开发
t4:一个月过去了。我的同事克莱尔(Clair)从MASTER创建了Feature_002分支。
t5:Clair在Feature_002分支中添加了提交,并尝试将其代码合并到DEV分支中并推送了它。但是,当她推动时就会出现冲突。
t6:Clair然后将更改从DEV分支提取并合并到她的Feature_002分支中(我的问题在此刻发生)。她做出了新的承诺,以解决Feature_002分支中的冲突。之后,Clair将她的代码合并到DEV中并推送。
t7:经过测试,克莱尔的经理说现在可以合并到MASTER分支了。因此,Clair将Feature_002分支合并到MASTER分支中。
t8:尽管开发的Feature_002 Clair在生产中起作用,但Feature_001也无意中出现在生产中,因为Feature_002分支曾经将来自DEV的代码合并到自身中以解决冲突。我们的经理感到震惊,并开始质疑谁敢让Feature_001投入生产!?
t9:永远开会,讨论发生的事情...
如果在该方案上做得很好,则可以发现由于要素分支之间的冲突,在Clair从DEV中提取代码后,Feature_002分支将包括Feature_001分支中的更改。
我的问题是如何独立保留两个功能分支,同时使我们能够解决它们之间的冲突?
任何反馈和讨论都非常感谢。
编辑20180925:
我想稍微调整一下情况。 Feature_001分支可能是不需要的,或者正在开发很长时间。首先对Feature_002进行测试并将其快速合并到MASTER中,让我们进行长时间的开发。但是,现在,当我们不希望Feature_001投入生产时,MASTER分支又会同时更改Feature_001和Feature_002。
答案 0 :(得分:1)
我看到那里有很多问题。如果不再开发功能001 ...,甚至丢弃,比如说它应该已经从dev分支中删除了。假设不是,当您将开发(通过功能002)合并到主服务器上时(还有另一个问题,我猜这是不应该发生的),然后由于功能001没有被取出,它就落入了主服务器中。
那么...如何避免呢?每个人都会说不同的话。我拿当您收到功能0001即将停止的通知时,它应该已从dev分支中删除(通过重写dev历史记录以避免合并或还原0001版本)。然后,我想您不应该将开发人员合并到主人员中……但这只是一个猜测,因为它实际上取决于您的工作流程。
答案 1 :(得分:1)
如果Feature_001的更改不打算发布到生产环境,则不应将其合并到DEV。所做的更改应留在Feature_001分支上。如果在合并到开发中后做出不发布Feature_001的决定,则更改应已还原。只要它存在于DEV上,其他从DEV提取的用户都将在其分支中进行更改。
答案 2 :(得分:0)
在Feature_001完成并批准拉取请求之前,分支Feature_001不应该合并到DEV。一旦将Feature_001合并到DEV中,就必须立即解决冲突,这将避免您遇到的问题,Feature_002分支具有来自Feature_001的某些提交的代码。理想情况下,Feature_001应该较小或分解为较小的特征,例如Feature-001-S-xxxxxx-MyStoryDescription,以便于跟踪。此外,由于您的分支Feature-001可能有很多提交,因此建议在执行拉取请求之前先压缩提交,并在发生合并冲突时重新设置分支的基础。编码愉快!