在合并到 master 之前删除 Git 分支中的一些提交
Delete few commits in Git branch before merge into master
我们有三个主要分支。 develop、uat 和 master。我们正处于当前冲刺的最后一周。已决定将一项功能推迟到下一个版本。该功能已在 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
分支上的最新三个提交
假设提交历史如下所示,提交 D
、E
和 F
是您决定推迟到下一个版本的功能的提交。
…---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
和F
将在合并uat
到[=24时申请下一个版本=] 下次再说。
…---A---B---G master
/
…---------C---D---E---F uat
情况二:三个commit不是最新commit,三个commit之后还有其他commit
假设提交历史如下,提交 D
、E
和 F
是您要删除的提交。并且在三个提交之后有提交G
和H
。
…---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
分支上重新应用三个提交 D
、E
和 F
:
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'
这三个提交可以在下次发布。
我们有三个主要分支。 develop、uat 和 master。我们正处于当前冲刺的最后一周。已决定将一项功能推迟到下一个版本。该功能已在 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
分支上的最新三个提交
假设提交历史如下所示,提交 D
、E
和 F
是您决定推迟到下一个版本的功能的提交。
…---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
和F
将在合并uat
到[=24时申请下一个版本=] 下次再说。
…---A---B---G master
/
…---------C---D---E---F uat
情况二:三个commit不是最新commit,三个commit之后还有其他commit
假设提交历史如下,提交 D
、E
和 F
是您要删除的提交。并且在三个提交之后有提交G
和H
。
…---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
分支上重新应用三个提交 D
、E
和 F
:
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'
这三个提交可以在下次发布。