Git工作流程 - 从发布分支恢复功能分支

时间:2014-02-25 11:50:08

标签: git github workflow git-merge continuous-deployment

我正在尝试了解创建git-workflow的问题

我们正在考虑使用功能分支一次开发多个功能,所以我们说:

- F1 (Feature 1)
- F2 (Feature 2)
- F3 (Feature 3)

我们刚刚完成了功能1和3,并将它们合并到我们的开发分支中进行集成测试:

-F1---Commit1---Commit2----------------------------------
-F2--------Commit1---------------------------------------
-F3--------------------------Commit1---------------------
-Development-------Merge-F1------------Merge-F2----------

开发部门正处于前沿,并且作为夜间构建的一部分被释放。当我们对此感到满意时,此分支将合并到一个临时分支中,然后用于客户端审核:

-F1---Commit1---Commit2---------------------------------------------
-F2--------Commit1--------------------------------------------------
-F3-------------------------Commit1-----Commit2---------------------
-Development-------Merge-F1------------Merge-F2---------------------
-Staging-------------------------------------------Merge-Development

客户在测试环境中查看此版本,但对F1不满意。在此期间,F3代码已完成,客户希望查看。

问:如何使用git进入我们的暂存分支只有F2和F3进行审核的位置,而不是客户现在拒绝的F1?

4 个答案:

答案 0 :(得分:5)

这里基本上有两种选择:

  1. 还原F1中的Development合并,然后将其合并到Staging
    F1将从DevelopmentStaging消失。

  2. 在合并Staging之前将F1重置为提交,并手动合并F2F3。 最终Staging不会成为Development的子集 F1只会从Staging消失。

答案 1 :(得分:4)

一个非常受欢迎的工作流程是git-flow。这基本上是一个非常灵活的模型。这并不意味着你必须完全按照那里的描述去做,但你可以从中获取灵感。

在这种情况下,一个好的解决方案是创建一个审核特定的临时分支,用于向客户展示。

此分支可以直接基于开发,也可以基于合并的特定功能的分段。

客户端审核后,您可以在暂存分支或特定版本分支中合并接受的功能,并且可以删除临时审阅分支。

这样,您就不必为长寿分支重写历史记录。

答案 2 :(得分:3)

您可以使用git revert命令恢复合并提交。

您必须指定要还原的合并提交以及要保留的父谱系。

Development $ git revert -m 1 <Merge-F1 SHA>

警告。恢复合并提交声明您永远不会希望合并带来的树更改。因此,以后的合并只会带来由不是先前还原的合并的祖先的提交引入的树更改。这可能是也可能不是你想要的。 (见git revert

评论警告。如果你想重新引入F1,你将不得不重新定义F1提交,这样就可以合并它们。

答案 3 :(得分:0)

我们的项目流程非常相似。我们的工作方式是,我们有两个环境来演示客户:

  • 发展
  • 测试

我们首先从开发分支部署到开发 环境。客户在此环境中分别测试功能。

然后,我们仅将客户满意的功能合并到 staging 分支。

最后,我们将最终的预发布版本部署到测试环境进行最终审查。

在这种情况下,我们不必删除功能,而可能需要修复一些问题。