我试图找出从一个分支到另一个分支选择提交子集的最佳方式,对我的特定工作流程的历史记录(例如重复提交)影响最小。以下是我的工作流程的说明,以及我尝试使用它的方案。
master:代表生产服务器上当前的内容。
开发:生产服务器上的代码,以及经过代码审查的最新更改。除非出现任何问题,否则在下一次发布到生产版本时,开发将合并为主。
feature-x:新功能的分支,取自开发主管。拉动请求开发,合并时通过代码审查。
feature-1:,通过代码审核并合并开发。
开发feature-2:,通过代码审核并合并开发。
开发feature-3:,通过代码审核并合并开发。
客户决定在没有功能-1 和功能-3 的情况下发布功能-2 。 feature-2 是一项独立更改,即它不依赖于 feature-1 中引入的任何内容。
我现在需要 feature-2 进入主人,没有功能-1 或功能-3 。
如果我尝试对master-2进行单独的pull-request pull-request,那么这也将释放feature-1,因为feature-2的分支中存在feature-1的提交。
如果我尝试将{2}中的提交从{2}提交到主服务器中,则当下一次将开发合并到主服务器时(即下次发布时发生),提交将被复制。使用一个简单的示例进行测试,干净地合并,但git cherry-pick
显示功能2分支中包含的任何内容的重复提交。
还有其他选择吗?如果不能解决这个问题,我可以忍受这种情况稍微不整洁的历史,但理想的解决方案可以避免重复提交。我还希望避免重新定位主人或开发,因为在发生这种情况时可能会有其他功能x分支处于活动状态。
任何帮助表示感谢。
答案 0 :(得分:0)
使用您建议的第一种方法,略微修改:只需在最后一点创建功能分支开发已合并到主。
在以下方案中,LM
commit表示从开发到主的最后一次合并,以及开发的最后一次提交LC
强>
----o---------o-----------o------------o--------> master
/ / / /
--o--o---o--o---o---o----o-----o-----LM---o---o---LC------> develop
而不是从上次提交创建新功能分支:
----o---------o-----------o------------o--------> master
/ / / /
--o--o---o--o---o---o----o-----o-----LM---o---o---LC------> develop
\
---------> feature_branch
从上次合并创建功能分支:
----o---------o-----------o------------o--------> master
/ / / /
--o--o---o--o---o---o----o-----o-----LM---o---o---LC------> develop
\
------------------------> feature_branch
通过这种方式,您可以在不使用其他" new"特征