Git: master / develop / feature 分支合并提交
Git: master / develop / feature branch merge commits
这是我正在关注的流程:
master
分支始终与生产同步
develop
分支总是下一个要发布的版本
feature/feature-name
分支是目前正在开发的功能。
功能完成后,拉取请求从 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.
是的,您正在创建两个合并提交,但您只在每个分支(develop
和 master
)中创建一个提交。这就是 Git 中合并的工作原理;当您将一个分支合并到另一个分支时,它会创建一个合并提交。
关于 master
和 develop
不同步,如果其他人在您之前将不同的功能合并到 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
,源分支总是“领先于”目标,允许您始终将提交快进到目标。
这是我正在关注的流程:
master
分支始终与生产同步develop
分支总是下一个要发布的版本feature/feature-name
分支是目前正在开发的功能。
功能完成后,拉取请求从 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.
是的,您正在创建两个合并提交,但您只在每个分支(develop
和 master
)中创建一个提交。这就是 Git 中合并的工作原理;当您将一个分支合并到另一个分支时,它会创建一个合并提交。
关于 master
和 develop
不同步,如果其他人在您之前将不同的功能合并到 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
,源分支总是“领先于”目标,允许您始终将提交快进到目标。