如何使用 Git branching/merging 来阻止开发分支中的错误提交?

How to hurdle buggy commits in a develop branch using Git branching/merging?

我正在研究不同的 Git 分支策略,但我一直卡在某个点上。假设您有一个主分支。此外,您还有一个 develop 分支,它是 master 的一个分支。有feature/topic个分支:

三个不同的开发人员进行每次更改。 ChangeConfig 开发人员快速完成、提交并合并到开发分支中。该开发分支现已构建并部署到开发环境。有人测试了这个新配置,它被批准从 Dev 转移到 QA 环境。 FixFrontEnd 和 FixBackEnd 分支同样成功。他们最终会进入 QA。

下一个优先级发生变化,三个 fixes/features 留在 QA 中。一个新的 YetAnotherChange fix/feature 进入了 QA。我们在 QA 中发现了 FixFrontEnd 和 ChangeConfig 的问题。但是,YetAnotherChange 必须尽快投入生产。

我读到的所有内容都说 develop 分支已合并到 master 分支,使用 master 为生产创建了一个新版本,并已部署。 FixFrontEnd 和 ChangeConfig 不会被拖到 master 合并中吗?大家是如何处理这个问题的?

樱桃采摘似乎是一个复杂的选择。我想要一些关于如何解决这个问题的好主意。我正在寻找一个简单的解决方案。此外,假设我们能够挑选提交。我们如何才能真正相信精心挑选和内置的内容将以与我们使用开发分支构建时相同的方式工作?我是不是在树林里迷路了?

所以您想对生产环境进行更改而不更改 FixFrontEnd 和 ChangeConfig 分支。您可以使用修复它的方法。让我们用下图来说明:

A---B---C master
 \
  D----E----F----G ----L  develop
      /     |     \     \
     H      I      J     K

假设每个 fix/feature 分支的提交历史为:

ChangeConfig:H然后合并开发分支

FixFrontEnd:我再合并开发分支

FixBackEnd:J然后合并开发分支

YetAnotherChange:K然后合并开发分支

你只需要找到D、F、L的commit ID,然后使用git rebase --onto <commit id for D> <commit id for F> <commit id for L>,develop分支不会包含FixFrontEnd和ChangeConfig分支的变化。它可以投入生产。该图将等于:

A---B---C master
 \
  D ----G ----L  develop
         \     \
          J     K

注意:在rebase过程中,可能有文件冲突,需要使用git add <conflicted filename>git rebase --continue,然后rebase才会继续。

Everything I'm reading says that the develop branch is merged into the master branch

不一定:你可以:

  • rebase YetAnotherChange 在 master 之上(然后快进 master 到 YetAnotherChange HEAD)
  • master 合并回 develop
  • develop.
  • 之上对剩余的功能分支进行变基

任何变基操作都会改变这些分支的历史记录,因此需要与在这些分支上工作的开发人员进行良好的沟通,以便他们将他们的工作树重置为新分支 HEAD。