Git:为发布选择一个更改子集

时间:2015-01-26 13:59:02

标签: git github version-control merge

我试图找出从一个分支到另一个分支选择提交子集的最佳方式,对我的特定工作流程的历史记录(例如重复提交)影响最小。以下是我的工作流程的说明,以及我尝试使用它的方案。

工作流

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分支处于活动状态。

任何帮助表示感谢。

1 个答案:

答案 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"特征