繁体   English   中英

bitbucket-解决冲突并保留原子特征分支

[英]bitbucket - solve conflicts and preserve atomic feature branches

鉴于以下git工作流程:

  • 从主分支(生产稳定的代码库)创建功能分支fb1
  • 当开发人员完成请求请求的创建时, fb1将合并到release-branch-1.xx
  • 从母版创建另一个功能分支fb2
  • 当在fb2上完成dev时,会创建另一个请求请求,并尝试将其合并到release-branch-1.xx中,但由于冲突而失败(很可能是fb1中的某些代码引入的)

根据解决该冲突的文档,这意味着将release-branch-1.xx (包含fb1代码)本地合并到fb2中 ,确定要保留的内容(解决冲突),然后将fb2推送到远程以更新请求请求。

这可以解决冲突,但是将在release-branch-1.xx上的所有工作添加到fb2中 ,这是我要避免的事情。 假设我要还原fb1合并提交,则fb1代码仍将在release分支上,因为它是fb2引入的。

关于如何避免这种情况的任何想法?

在大多数工作流程中,每个功能分支的所有者负责使分支保持最新状态,无论“正式”代码行是什么(为了尽可能通用,我将称其为集成分支母版。开发,发布或在各种工作流程中使用其他名称)。 因此,您的方案的完整序列如下所示:

  1. 开发人员1从主服务器启动fb1
  2. 开发人员2从主服务器启动fb2
  3. 开发人员1完成其功能并提交pr1以将fb1合并为master
  4. fb1已通过测试并获得批准,并且pr1被接受, 母版已更新为包含首字母+ fb1
  5. 开发人员2完成了她的功能,但发现她的分支现在已过期
  6. 开发人员2将master合并到fb2中,并解决了其分支现在包含初始+ fb1 + fb2的冲突
  7. 开发人员2提交pr2以将fb2合并到master
  8. 发现由于feature1导致的严重错误,因此fb1master的合并被还原,master现在仅包含初始
  9. fb2现在已过时,因为master已被更改,并且如果以前解决了冲突,则将在恢复原始代码的情况下再次发生冲突,因此pr2将无法自动合并,bitbucket会警告您。
  10. 开发人员2将master合并到fb2中并解决了冲突,从而使其分支包含了initial + fb2
  11. 开发人员2推动更新pr2 ,然后将其批准并合并,从而形成一个包含initial + fb2分支。

Git在合并时使用两次提交的最新公共祖先,而不是代码发散的原始点。 即使没有冲突,将来自master的更改(包括fb1 )整合到fb2中时 ,这两个分支之间的共同祖先将是包含initial + fb1的 master上的一个点,如果随后将fb1从master移除,则git会看到那些在master分支上发生了更改,并且最终的合并将不包含那些更改。

您可以用代数的方式考虑合并,其中m = mergeb = basel = leftr = rightf = featurei = initial

m = b        + diff(b,l)           + diff(b,r)
m = (i + f1) + diff((i + f1), (i)) + diff((i + f1), (i + f1 + f2))
m = (i + f1) + (-f1)               + (f2)
m = i  + (f1 + -f1)                + (f2)
m = i + f2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM