【发布时间】:2022-01-15 04:01:16
【问题描述】:
我在一家公司工作,我们决定要更正确地使用 git。我负责将 dev 分支集成到主分支中,对于如何在不同的场景中正确合并感到困惑。
我们现在的工作方式:开发人员只需在 dev 分支上重新定位他们的功能分支。完成后,他们将向dev 分支提交合并请求。然后,我会检查代码(我们是一个小团队),并接受合并请求。之后,他们只需删除功能分支。当dev 分支经过正确测试后,我会在 GitLab 中创建一个到主分支的合并请求,将其分配给我自己并批准它。这会在 main 分支上创建一个提交:
将分支'dev'合并到'main'中
然而,现在dev 分支是main 后面的一个提交。我如何最好地解决这个问题?到目前为止,我只是将main 再次合并到dev 中,但这看起来既麻烦又奇怪,因为它们现在是我的dev 分支中的另一个提交;
将'main'分支合并到'dev'中
我也可以在 main 上 rebase dev,但我知道“你永远不应该 rebase public 分支”
This SO 问题告诉我正确的方法是首先将 main 合并到 dev 中,以确保 main 分支保持干净。这会是实现dev --> main 合并的最佳方式吗?
这是否受到 git fast-forwards 由 default 合并的概念的影响?我读到,当从当前分支尖端到目标分支存在线性路径时,就会发生快进合并。这意味着,当 dev 分支在合并时简单地领先于 x 提交到 main 时,同时没有向 main 提交(这在我们的工作中很常见,因为我们在技术上只提交从dev 到main),合并将自动成为快进合并?这种行为对于将dev 合并到main 是否有问题,我应该在合并时使用-no-ff 标志吗?
如果我理解正确,快进合并集成dev 提交到main 分支,而--no-ff 合并导致合并总是创建一个新的提交对象,即使可以使用快进执行合并(来源:This SO question)。这是否意味着 ff 合并不会创建提交,而 dev 只是领先于 x 提交给 main?在本地合并分支后,我将如何向上游推送合并?我应该在本地合并 dev 和 main 还是干脆继续使用 gitlab 网络界面?
不用说,我对这一切感到非常困惑。如果有人能把事情弄清楚就好了。
【问题讨论】:
-
"现在 dev 分支是 main 后面的一个提交。我该如何最好地解决这个问题" 修复什么?为什么这是个问题?这是真的,没关系。
-
@matt 让我感到困惑的是,我有这样的想法,即分支在合并后应该具有 ~exactly ~ 相同的历史记录,因为两个分支现在应该包含相同的内容。但是,由于合并了分支,它们确实具有相同的内容。使历史“不同”的事情是主分支或开发分支上的~实际~合并提交。这确实是正确的。
-
一般来说,不,如果你将dev合并到main中,它们的内容就不一样了。事实上,如果两个分支总是有相同的内容,就不需要两个分支。