批准合并请求时如何压缩提交,gitlab
Posted
技术标签:
【中文标题】批准合并请求时如何压缩提交,gitlab【英文标题】:How to squash commit when approve merge request, gitlab 【发布时间】:2016-12-22 13:39:03 【问题描述】:我在 gitlab 有两个分支 master
和 release
。
在发布分支,我希望它只有提交消息,如:v0.1.0,v0.1.1。
说在我完成 v0.1.0 开发后,我在 master
中有几个功能和错误修复提交说
c1. bugfix1
c2. feature1
c3. feature2
我将在 gitlab 中创建从master
到release
的合并请求,但我希望将这三个提交合并为一个v0.1.0
,并挤压c1 c2 c3。
现在,在我现有的设置中,我将有 4 条提交消息:
Merge breanch 'master' into release
c1
c2
c3
当我在 gitlab 上批准时,有没有办法将其压缩,以便将消息压缩到:
v0.1.0
请注意这两个分支都是受保护的分支,如果可能的话我希望release
和master
分支上会有NO git命令,并且只有gitlab操作
【问题讨论】:
【参考方案1】:git checkout release
git merge --squash master
git commit -m "Suitable Message of your choice"
这将从master
分支获取所有提交,将它们压缩为1 个提交,然后将其与您的release
分支合并。
【讨论】:
【参考方案2】:合并提交是只有一次提交,但你似乎陷入了“快进”陷阱。也就是说,在您的合并中,git
已决定 master
是 release
的直系祖先的一部分,然后在 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 审查
python gitlab api 合并请求失败,出现 gitlab.execeptions.GitlabMRClosedError 405