【问题标题】:Delete few commits in Git branch before merge into master在合并到 master 之前删除 Git 分支中的一些提交
【发布时间】:2017-10-25 13:42:34
【问题描述】:

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

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

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

【问题讨论】:

  • 使用来自 uat 的发布分支,您可以在再次将其合并到 master 之前修复该发布分支上的任何合并冲突。我认为您的第一个想法似乎是合理的。
  • 感谢@Martin,问题是发布分支是一个临时分支,将为此场景创建。当前版本完成后它将消失。我们总是从 UAT 合并到 master。
  • @Ela:这可能是您原始问题中应该包含的关键信息(您现在可以对其进行编辑)。请注意,如果您删除分支名称,它保留的提交可能会被垃圾收集——这似乎与发布的要点相反。
  • 谢谢@torek 实际上,我们的分支策略中没有发布分支。那是一个临时分支,就像在需要时创建一个错误修复分支。
  • @torek 如果分支被合并,您可以安全地删除分支名称(不会丢失历史记录)。只有当分支没有在任何地方合并时,这些提交才会被丢弃。 Why Delete Old Git Branches?

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


【解决方案1】:

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

所以我会建议备份当前uat 分支,删除uat 分支上的三个提交。将uat 分支合并到master 后,再次恢复/重新应用uat 分支上的三个提交以供下一个版本

有两种情况供您更改和恢复/重新应用uat 分支。您可以按照您遇到的以下情况之一。

情况1:三个commit是uat分支上最近的三个commit

假设提交历史如下所示,并且提交 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合并到master时申请下一个版本。

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

情况2:三个commit不是最新的commit,三个commit之后还有其他commit(s)

假设提交历史如下,提交 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'这三个提交可以在下次发布。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-03
    • 1970-01-01
    • 2017-01-24
    • 1970-01-01
    • 2021-06-12
    • 2022-11-10
    • 2013-12-13
    相关资源
    最近更新 更多