Git: master / develop / feature 分支合并提交

Git: master / develop / feature branch merge commits

这是我正在关注的流程:

功能完成后,拉取请求从 feature/feature-name 提交到 develop 分支,然后从 develop 分支提交到 master 分支。我们在 github.

中完成所有这些

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

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

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

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

没有对的方法,就看你想怎么管理分支了。有些人明智地做它,有些人可能明智地做模块,有些人为开发人员创建单独的分支。但关键思想是让你的本地代码与 master 和 develop 分支保持同步,更频繁地从 develop 分支拉取更新的代码。

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

Therefore, in order to have 1 feature merged, I have to create 2 merge commits.

What is worse, now master branch and develop branch are no longer in sync, because master branch has 1 extra merge commit.

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

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

你问了这个问题:

how to keep the master branch do not create extra commit when fast-forwarding from develop?

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

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