在合并到master之前删除Git分支中的一些提交

时间:2017-10-25 13:42:34

标签: git version-control git-merge merge-conflict-resolution

我们有三个主要分支。 开发 uat master 。我们正处于当前冲刺的最后一周。已经决定将一个功能推迟到下一个版本。该功能已在 uat 环境中使用。所以团队希望将其保留在 uat 分支中。因此,在合并到 master 之前,我必须删除具有3次提交的功能。

我可以从 uat 创建一个发布分支,还原这3个提交并合并到 master 。但下次主分支可能会发生冲突,因为通常会将 UAT 合并到中。除此之外,release分支是将为此方案创建的临时分支,它将在合并后删除。

我不想搞乱主分支。请建议是否有更好的方法来处理这种情况。

1 个答案:

答案 0 :(得分:1)

您正在使用的工作流程似乎是:uat分支的持续构建/部署,然后将uat分支合并到master以获取新版本。

因此我建议备份当前uat分支,删除uat分支上的三个提交。将uat分支合并到master后,在uat分支上恢复/重新应用三次提交,以便下次发布

您有两种情况需要更改和恢复/重新应用uat分支。您可以按照以下情况进行操作。

情况1:三次提交是uat分支

上的最新三次提交

假设提交历史记录如下所示,提交DEF是您决定推迟下次发布的功能的提交。

…---A---B            master
…---C---D---E---F   uat

您可以使用以下命令备份当前uat分支,然后删除uat分支上的三个提交:

git checkout -b temp uat
git checkout uat
git reset --hard HEAD~3

然后提交历史记录如下:

…---A---B         master
…---C             uat
     \
      D---E---F   temp

现在,您可以将uat合并到新版本的master中,因此提交历史记录将为:

…---A---B---G           master
           /
…---------C             uat
           \
            D---E---F   temp

然后您可以通过

恢复原始uat分支
git checkout uat
git merge temp
git branch -D temp

然后,提交历史记录如下所示,当D合并到E时,三个提交Fuatmaster将适用于下一版本下一次。

…---A---B---G             master
           /
…---------C---D---E---F   uat

情况2:三次提交不是最新提交,三次提交后还有其他提交

假设提交历史记录如下,并且提交DEF是您要删除的提交。在三次提交之后,提交了GH

…---A---B    master
…---C---D---E---F---G---H   uat

要备份当前uat并删除uat分支上的三个提交,您可以使用以下命令:

git checkout -b temp uat
git checkout uat
git rebase --onto uat~5 uat~2 uat

提交历史记录将是:

…---A---B         master
…---C---G'---H'   uat
         \
          D---E---F---G---H   temp

uat合并到master后,提交历史记录如下:

…---A---B------I   master
              /
…---C---G'---H'   uat
     \
      D---E---F---G---H   temp

然后,您可以通过以下命令在D分支上重新应用三个提交EFuat

git checkout temp
git reset --hard HEAD~2
git rebase uat temp
git checkout uat
git merge temp
git branch -D temp

然后提交历史记录将是:

…---A---B------I    master
              /
…---C---G'---H'---D'---E'---F'   uat

下次可以发布三个提交D'E'F'