如何防止 Gitlab 在分支合并上创建额外的合并提交

Posted

技术标签:

【中文标题】如何防止 Gitlab 在分支合并上创建额外的合并提交【英文标题】:How to prevent Gitlab from creating extra merge commit on branch merge 【发布时间】:2015-06-08 15:45:18 【问题描述】:

我在我的项目中使用 GitLab。我正在探索合并请求功能。

    我从master 创建了一个topic_branch。 在topic_branch 上进行了一系列提交。 将topic_branch 推送到远程。 在master 上创建了一个合并请求以从topic_branch 中提取更改。 在 Gitlab 中接受合并时,master 拉取了所有提交并创建了一个合并提交,这对于看到代码重复非常可怕。

我应该在分支上创建一个提交的壁球,然后创建合并请求。但是master 仍然会有两个新的提交,一个来自分支,另一个是合并提交。我假设,如果我从命令行执行此操作,即

    结帐mastertopic_branch 合并到master 提交/推送master 在这种情况下,master 上只有 1 次提交。

如何通过 GitLab 实现这一目标?

【问题讨论】:

【参考方案1】: TL;博士

您的项目 > 设置 > 常规 > 合并请求设置 > 快进合并。

就个人而言,我也更喜欢在每次合并时使用squash commits


我认为 GitLab 现在支持这一点。

步骤

    转到您的project 导航到项目settings(注意:这不是右上角的配置文件设置) 转到General 选项卡。 导航至Merge Request Settings 部分 选择Fast-Forward Merge

【讨论】:

PS:Fast-Forward 设置仅在 EE 或 CE(10.1+) 中支持【参考方案2】:

我应该在分支上创建一个提交的壁球

对于GitLab 13.3(2020 年 8 月),有一个对您来说很有趣的新选项:

Squash 提交选项

在 Git 中压缩提交是将多个提交合并为一个的好方法。 它非常适合在向上游推送之前将多个提交(这些提交本身可能提供很少的历史价值)组合成一个大型提交。 推送单个提交允许更有意义的提交消息,并确保提交组提供“绿色”持续集成管道。

在 GitLab 13.3 中,我们为压缩提交添加了可配置的默认值,允许项目维护人员配置选项以适应他们首选的工作流程。

由于更改 squash 配置可能会引入不需要的行为,因此尚未更改新项目或现有项目的配置。有 314 人支持 ?,这是社区要求最高的改进之一,我们希望它可以让更多用户使用这个强大的功能。

参见Documentation 和Issue。

【讨论】:

【参考方案3】:

正如我从 http://doc.gitlab.com/ee/workflow/rebase_before_merge.html 了解到的那样,GitLab 将始终创建合并提交以保留恢复整个分支的方法。

【讨论】:

@CSchulz,我们有一些免费的 Gitlab 实例,即使在变基时,合并请求也会创建合并提交。也许你的意思是 EE 有一些“恢复”按钮?您可以从控制台恢复合并提交,而无需 --force。 对不起,我错过了关于变基的细节。我会尽快删除这条评论。 注意:合并前的变基是企业版功能。【参考方案4】:
    结帐mastertopic_branch 合并到master commit / push master 在这种情况下,master 上只有 1 次提交。

这不是真的。您将拥有来自 topic_branch 的所有提交和一个 Merge branch 'topic_branch'commit 在您的 master 中,除了自从您分支 topic_branch 以来没有任何提交添加到您的 master 分支的情况。在这种情况下,git merge 的默认行为是执行fast forward merge。快进合并将您的 topic_branches 更改合并到主 合并提交(有关更多文档,请参阅 here)。

但是,当您在 GitLab 中创建合并请求时,顾名思义,您是在请求将您的 topic_branch 合并到您的代码库中。默认情况下,GitLab 将始终创建一个合并请求,即使可以进行快进合并,以保留提交是在您历史记录中的另一个分支上开发的事实。

现在好消息:您可以将 GitLab 配置为执行快进合并,而不是创建合并提交:请参阅 here。然而,这似乎只能在 GitLab 企业版中实现。

【讨论】:

【参考方案5】:

update 目前 gitlab 支持拒绝非快进提交和压缩合并请求的多个提交,所以我下面的评论不再有效

原创内容

如果您不想进行合并提交,请不要​​进行合并。这意味着对目标分支(主)进行变基和推送。

【讨论】:

这不能回答问题。手动是的,你可以做你需要的所有流程。但是从 GitLab 的界面来看,对于 not 有一个额外的 Merge 提交似乎没有一个好的解决方案。 @k3liutZu 是否需要合并提交取决于用户,而不管 gitlab 对此有何看法。问题的作者显然不希望有一个(我)。

以上是关于如何防止 Gitlab 在分支合并上创建额外的合并提交的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Gitlab 中成功的管道结束时创建合并请求?

如何通过命令行创建 GitLab 合并请求

防止在 TFS 2017 分支上直接签入,仅允许合并

在 GitLab 中创建合并请求失败

Git:如何防止特定的提交被合并到另一个分支中?

使用gitlab cicd自动合并分支