首先,我想
- 让我的
master
分支始终保持绿色。 - 能够为下一个版本挑选更改。
分支策略:
- 我有一个
master
分支和一个integration
与它一起运行的分支。 master
从任务/问题分支。- 当一个任务分支完成它的工作时,将其合并,
integration
看看它是否破坏了其他任务分支的任何工作。如果是,请修复它们。 从任务分支(不是
integration
分支)拉取请求到master
分支。这意味着该
integration
分支仅用于 CI 目的,它永远不会被合并到master
- 决定下一个版本将包括哪些更改。将这些分支合并到
master
. - 发布。
这是问题所在,假设我有以下情况:
master -*-----------------
|\
integration -+-\-------C---F---
| \ / /
ken/task#1 | A---B /
| /
bob/task#2 D---------E
在F
中,发生了两件事:
- 发生合并冲突
C
并F
更改了相同的行some-code.js
F
打破了一些测试C
。
现在,Bob 必须解决这个问题,他有两个选择:
选项1
- 合并
integration
为bob/task#2
_G
- 修复中的错误
H
- 合并
integration
为I
integration
绿色拉取请求
master -*-------------------------- |\ integration -+-\-------C---F-----------I | \ / / \ / ken/task#1 | A---B / \ / | / \ / bob/task#2 D---------E-------G---H
但是,通过这种方法,我不能只task#2
选择包含在我的下一个版本中。因为bob/task#2
( H
) 中已经包含了 中所做的更改ken/task#1
,所以并入bob/task#2
意味着master
并入ken/task#1
在一起master
。
选项 2
- 切换回
bob/task#2
- 尝试修复中的错误
G
- 合并
integration
并运行测试以查看测试是否为绿色 - 如果没有,请切换回
bob/task#2
- 尝试修复它
I
合并
integration
并运行测试...
直到
integration
是绿色的。拉取请求
master -*----------------- |\ integration -+-\-------C---F---H---J--- .......... | \ / / / / ken/task#1 | A---B / / / | / / / bob/task#2 D---------E---G---I--- ..............
这种方法可以防止将更改ken/test#1
从bob/task#2
.
然而,Bob 现在需要“猜测”他需要做什么来修复这个错误。然后一遍又一遍地合并到integration
,看看测试是否是绿色的,因为G
现在I
没有添加测试C
。
some-code.js
每次他将他的工作合并到中时,他还需要解决同样的合并冲突integration
,这既痛苦又多余。
Bob有更好的选择3吗?
谢谢。