批准合并请求时如何压缩提交,gitlab

Posted

技术标签:

【中文标题】批准合并请求时如何压缩提交,gitlab【英文标题】:How to squash commit when approve merge request, gitlab 【发布时间】:2016-12-22 13:39:03 【问题描述】:

我在 gitlab 有两个分支 masterrelease

在发布分支,我希望它只有提交消息,如:v0.1.0,v0.1.1。

说在我完成 v0.1.0 开发后,我在 master 中有几个功能和错误修复提交说

c1. bugfix1
c2. feature1 
c3. feature2

我将在 gitlab 中创建从masterrelease 的合并请求,但我希望将这三个提交合并为一个v0.1.0,并挤压c1 c2 c3。

现在,在我现有的设置中,我将有 4 条提交消息:

Merge breanch 'master' into release
c1
c2
c3

当我在 gitlab 上批准时,有没有办法将其压缩,以便将消息压缩到:

 v0.1.0

请注意这两个分支都是受保护的分支,如果可能的话我希望releasemaster分支上会有NO git命令,并且只有gitlab操作

【问题讨论】:

【参考方案1】:
git checkout release
git merge --squash master
git commit -m "Suitable Message of your choice"

这将从master 分支获取所有提交,将它们压缩为1 个提交,然后将其与您的release 分支合并。

【讨论】:

【参考方案2】:

合并提交只有一次提交,但你似乎陷入了“快进”陷阱。也就是说,在您的合并中,git 已决定 masterrelease 的直系祖先的一部分,然后在 release 之上“快速转发”您的更改。那么,这看起来就像你描述的那样。

要解决此问题,请在合并中添加 --no-ff 选项:

git checkout release
git merge --no-ff master

然后,您将在您的 release 分支上准确提交一次;您可以编辑提交消息以包含您的发布版本。

【讨论】:

【参考方案3】:

您可以使用 git rebase 压缩提交。

在你的情况下,它应该是 git rebase -i HEAD~3。

见http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html

【讨论】:

【参考方案4】:

如果您在 GitLab 图形界面上看到此消息,如下所示:

只需按照您的 MR 链接中的这些步骤操作:

编辑 > 合并选项:取消选中“合并请求时压缩提交 接受”选项。

之后,合并应该在 Gitlab 上进行。

【讨论】:

以上是关于批准合并请求时如何压缩提交,gitlab的主要内容,如果未能解决你的问题,请参考以下文章

将 GitLab 合并请求中的所有提交添加到 Upsource 审查

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

Gitlab:服务器挂钩自定义错误消息未显示在合并请求上

在 Gitlab 中合并请求后运行 Jenkins 作业

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

python gitlab api 合并请求失败,出现 gitlab.execeptions.GitlabMRClosedError 405