【问题标题】:Git: master / develop / feature branch merge commitsGit:主/开发/功能分支合并提交
【发布时间】:2015-12-22 20:36:37
【问题描述】:

这是我关注的流程:

  • master 分支始终与生产同步
  • develop 分支永远是下一个要发布的版本
  • feature/feature-name 分支是目前正在开发的功能。

功能完成后,从feature/feature-namedevelop 分支发起拉取请求,然后从develop 分支向主分支发起拉取请求。我们在 github 中完成所有这些工作。

但是,只要 github 上有拉取请求,这里就会创建合并分支。因此feature/feature-name合并到develop分支后,创建了一个合并提交;在 develop branch 合并到 master branch 之后,会创建另一个合并提交。

因此,为了合并 1 个功能,我必须创建 2 个合并提交。

更糟糕的是,现在 master 分支和 develop 分支不再同步,因为 master 分支有 1 个额外的合并提交。

我有两个问题: 1)我是否遵循正确的结构/做法? 2)如何避免额外的合并提交?特别是。从开发快速转发时如何保持主分支不创建额外提交?

【问题讨论】:

    标签: git github merge branch git-branch


    【解决方案1】:

    您的问题中似乎存在一些误解,我将尝试解决。首先,你是这么说的

    因此,为了合并 1 个功能,我必须创建 2 个合并提交。

    更糟糕的是,现在 master 分支和 develop 分支不再同步,因为 master 分支有 1 个额外的合并提交。

    是的,您正在创建两个合并提交,但您只在每个分支中创建一个提交(developmaster)。这就是 Git 中合并的工作原理;当您将一个分支合并到另一个分支时,它会创建一个合并提交。

    关于 masterdevelop 不同步,如果其他人在您之前将不同的功能合并到 develop 中,它们可能无论如何都不同步。从功能的角度来看,假设自上一个 sprint 以来没有其他人对 master 进行过更改,当您将 develop 合并到 master 时,两个分支在功能上应该是等效的(尽管它们的历史可能看起来不同)。

    你问了这个问题:

    从develop快进时如何保持master分支不创建额外提交?

    如果您的 develop 分支实际上快进了 master 分支,那么我认为您不会进行 Git 合并。但是,如果您不能快进master,那么解决此问题的一种方法是进行手动合并。在这种情况下,合并提交是不可避免的。

    如果你真的讨厌合并提交,那么你应该考虑使用变基。使用git rebase,源分支始终“保持领先”目标,让您始终将提交快进到目标。

    【讨论】:

    • 感谢您的回复。我认为根据您的描述,我可以接受额外的合并提交。
    • 如果您真的想消除合并提交,请查看变基。如果我没记错的话,GitHub 会尝试强制执行基于合并的工作流程,这是我不喜欢的。
    • 是的,我知道变基是如何工作的。但我也想强制不推入主分支。如果快进,这意味着我必须直接推入主分支。
    • 这是 Git 世界的大难题和争论。
    【解决方案2】:

    没有正确的方法取决于您要如何管理分支机构。有些是功能方面的,有些可能是模块方面的,有些为开发人员创建单独的分支。但关键是要让你的本地代码与 master 和 develop 分支保持同步,更频繁地从 development 分支拉取更新的代码。

    【讨论】:

      猜你喜欢
      • 2013-07-25
      • 1970-01-01
      • 1970-01-01
      • 2016-11-25
      • 2021-03-22
      • 2015-11-18
      • 2023-02-07
      • 2020-05-02
      • 2017-02-27
      相关资源
      最近更新 更多