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

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

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

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

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

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

【问题讨论】:

    标签: git version-control merge gitlab


    【解决方案1】:
    TL;博士

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

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


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

    步骤

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

    【讨论】:

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

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

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

    Squash 提交选项

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

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

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

    参见DocumentationIssue

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • @CSchulz,我们有一些免费的 Gitlab 实例,即使在变基时,合并请求也会创建合并提交。也许你的意思是 EE 有一些“恢复”按钮?您可以从控制台恢复合并提交,而无需 --force。
      • 对不起,我错过了关于变基的细节。我会尽快删除这条评论。
      • 注意:合并前的变基是企业版功能。
      【解决方案4】:
      1. 结帐master
      2. topic_branch 合并到master
      3. 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 对此有何看法。问题的作者显然不希望有一个(我)。
        猜你喜欢
        • 2015-03-22
        • 1970-01-01
        • 2017-07-07
        • 1970-01-01
        • 1970-01-01
        • 2013-09-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多