我们有三个主要分支。 开发, uat 和 master 。我们正处于当前冲刺的最后一周。已经决定将一个功能推迟到下一个版本。该功能已在 uat 环境中使用。所以团队希望将其保留在 uat 分支中。因此,在合并到 master 之前,我必须删除具有3次提交的功能。
我可以从 uat 创建一个发布分支,还原这3个提交并合并到 master 。但下次主分支可能会发生冲突,因为通常会将 UAT 合并到主中。除此之外,release分支是将为此方案创建的临时分支,它将在合并后删除。
我不想搞乱主分支。请建议是否有更好的方法来处理这种情况。
答案 0 :(得分:1)
您正在使用的工作流程似乎是:uat
分支的持续构建/部署,然后将uat
分支合并到master
以获取新版本。
因此我建议备份当前uat
分支,删除uat
分支上的三个提交。将uat
分支合并到master
后,在uat
分支上恢复/重新应用三次提交,以便下次发布。
您有两种情况需要更改和恢复/重新应用uat
分支。您可以按照以下情况进行操作。
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
和master
将适用于下一版本下一次。
…---A---B---G master
/
…---------C---D---E---F uat
假设提交历史记录如下,并且提交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
然后,您可以通过以下命令在D
分支上重新应用三个提交E
,F
和uat
:
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'
。