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

Delete few commits in Git branch before merge into master

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

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

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

您使用的工作流程似乎是:uat 分支连续build/deploying,然后将uat 分支合并到master 以进行新发布。

所以我建议备份当前uat分支,删除uat分支上的三个提交。将 uat 分支合并到 master 后,recovery/reapply 再次在 uat 分支上提交下一个版本 .

有两种情况需要你改recovery/reapplyuat分支。遇到以下情况,您可以跟进。

情况一:三个提交是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

然后提交历史如下所示,三个提交DEF将在合并uat到[=24时申请下一个版本=] 下次再说。

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

情况二:三个commit不是最新commit,三个commit之后还有其他commit

假设提交历史如下,提交 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

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

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'这三个提交可以在下次发布。