如何防止 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
仍然会有两个新的提交,一个来自分支,另一个是合并提交。我假设,如果我从命令行执行此操作,即
-
结帐
master
将topic_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】:结帐
master
将topic_branch
合并到master
commit / pushmaster
在这种情况下,master
上只有 1 次提交。
这不是真的。您将拥有来自 topic_branch
的所有提交和一个 Merge branch 'topic_branch'
commit 在您的 master 中,除了自从您分支 topic_branch
以来没有任何提交添加到您的 master 分支的情况。在这种情况下,git merge
的默认行为是执行fast forward merge。快进合并将您的 topic_branch
es 更改合并到主 合并提交(有关更多文档,请参阅 here)。
但是,当您在 GitLab 中创建合并请求时,顾名思义,您是在请求将您的 topic_branch
合并到您的代码库中。默认情况下,GitLab 将始终创建一个合并请求,即使可以进行快进合并,以保留提交是在您历史记录中的另一个分支上开发的事实。
现在好消息:您可以将 GitLab 配置为执行快进合并,而不是创建合并提交:请参阅 here。然而,这似乎只能在 GitLab 企业版中实现。
【讨论】:
【参考方案5】:update 目前 gitlab 支持拒绝非快进提交和压缩合并请求的多个提交,所以我下面的评论不再有效
原创内容
如果您不想进行合并提交,请不要进行合并。这意味着对目标分支(主)进行变基和推送。
【讨论】:
这不能回答问题。手动是的,你可以做你需要的所有流程。但是从 GitLab 的界面来看,对于 not 有一个额外的 Merge 提交似乎没有一个好的解决方案。 @k3liutZu 是否需要合并提交取决于用户,而不管 gitlab 对此有何看法。问题的作者显然不希望有一个(我)。以上是关于如何防止 Gitlab 在分支合并上创建额外的合并提交的主要内容,如果未能解决你的问题,请参考以下文章