Chr*_*isC 6 git version-control merge github
我正在尝试找出从一个分支到另一个分支选择提交子集的最佳方法,同时对我的特定工作流程的历史记录(例如重复提交)的影响最小。这是我的工作流程的描述,以及我尝试使用它的场景。
master:代表当前在生产服务器上的内容。
开发:生产服务器上的代码,加上经过代码审查的最新更改。如果没有任何问题,在下一个生产版本执行时,develop 将合并到 master。
feature-x:新功能的分支,取自开发负责人。Pull-request 用于开发,在通过代码审查时合并。
feature-1:已开发,通过code-review,合并开发。
feature-2:已开发,通过code-review,合并开发。
feature-3:已开发,通过code-review,合并开发。
客户决定功能-2应该没有发布功能1和功能3。 feature-2是一个独立的更改,即它不依赖于feature-1 中引入的任何内容。
我现在需要让feature-2掌握,没有feature-1或feature-3。
如果我尝试将 feature-2 的单独拉取请求发送到 master,那么这也将释放 feature-1,因为 feature-1 的提交存在于 feature-2 分支中。
如果我尝试git cherry-pick从 feature-2 提交到 master,那么在 develop 下一次合并到 master 时(即下一个版本发生时),提交将被复制。使用一个简单合并的简单示例对此进行测试,但git log显示包含在 feature-2 分支中的任何内容的重复提交。
有没有其他选择?在这种情况下,如果没有办法解决,我可以忍受稍微凌乱的历史记录,但理想的解决方案是避免重复提交。我还想避免 rebase master 或 develop,因为当发生这种情况时,可能会有其他 feature-x 分支处于活动状态。
任何帮助表示赞赏。
使用您建议的第一种方法,稍作修改:只需从开发合并到master上的最后一点创建功能分支。
在以下场景中, commit 代表从develop到master 的LM最后一次合并以及develop的最后一次提交。LC
----o---------o-----------o------------o--------> master
/ / / /
--o--o---o--o---o---o----o-----o-----LM---o---o---LC------> develop
Run Code Online (Sandbox Code Playgroud)
而不是从上次提交创建新的功能分支:
----o---------o-----------o------------o--------> master
/ / / /
--o--o---o--o---o---o----o-----o-----LM---o---o---LC------> develop
\
---------> feature_branch
Run Code Online (Sandbox Code Playgroud)
从上次合并创建功能分支:
----o---------o-----------o------------o--------> master
/ / / /
--o--o---o--o---o---o----o-----o-----LM---o---o---LC------> develop
\
------------------------> feature_branch
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您可以从功能分支创建拉取请求,而无需其他“新”功能。
| 归档时间: |
|
| 查看次数: |
1178 次 |
| 最近记录: |