How to prevent Gitlab from creating extra merge commit on branch merge

17,620

Solution 1

TL;DR

Your Project > Settings > General > Merge Request Settings > Fast-Forward Merge.

Personally, I also prefer to do squash commits on every merge.


I think GitLab supports this now.

Steps

  1. Go to your project
  2. Navigate to project settings (Note: This is NOT the profile settings available on the top right)
  3. Go to General tab.
  4. Navigate to Merge Request Settings section
  5. Choose Fast-Forward Merge.

enter image description here

Solution 2

I should have created a squash of commits on branch

With GitLab 13.3 (August 2020), there is a new option which is interesting in your case:

Squash Commits Options

Squashing commits in Git is a great way to combine several commits into a single one.
It’s great for grouping several commits, which by themselves may provide little historical value, into a single large commit before pushing upstream.
Pushing a single commit allows for a more meaningful commit message, as well as ensuring the group of commits provides a “green” continuous integration pipeline.

In GitLab 13.3 we are adding configurable defaults for squashing commits, allowing project maintainers to configure the option to suit their preferred workflow.

Because changing squash configuration may introduce unwanted behavior, configuration has not been changed for new or existing projects. With 314 upvotes 👍, this is one of the most highly requested improvements by the community and we hope it allows more users to use this powerful feature.

https://about.gitlab.com/images/13_3/create_source_code_configurable_defaults_for_squash_commits_option.png -- Squash Commits Options

See Documentation and Issue.

Share:
17,620

Related videos on Youtube

TechCrunch
Author by

TechCrunch

Updated on June 04, 2022

Comments

  • TechCrunch
    TechCrunch almost 2 years

    I use GitLab in my project. I'm exploring Merge Requests feature.

    1. I created a topic_branch from master.
    2. Made a bunch of commits on topic_branch.
    3. Pushed topic_branch to remote.
    4. Created a merge request on master to pull changes from topic_branch.
    5. On accept merge in Gitlab, master pulled all the commits and also created a merge commit which is horrible to see duplication of code.

    I should have created a squash of commits on branch and then created merge request. But still master would have two new commits, one from the branch and another one would be merge commit. I'm assuming, if I do this from command line i.e,

    1. checkout master
    2. merge topic_branch into master
    3. commit / push master In this case, there would be only 1 commit on master.

    How to achieve this from GitLab ?

  • k3liutZu
    k3liutZu about 8 years
    This doesn't answer the question. Manually yes, you can do all flows you need. But from GitLab's interface there doesn't appear to be a good solution to not have an extra Merge commit.
  • Mykola Gurov
    Mykola Gurov about 8 years
    @k3liutZu it is up to user whether he wants or not to have a merge commit irrespectively of what gitlab thinks of that. The author of the question would obviously prefer not to have one (me to).
  • Nakilon
    Nakilon almost 8 years
    @CSchulz, we have some free Gitlab instance and Merge requests create merge commits even while rebasing. Maybe you mean EE has some "revert" button? You can revert merge commits from console and without need of --force.
  • CSchulz
    CSchulz almost 8 years
    Sorry I missed the detail about the rebase. I will delete this comment soon.
  • CSchulz
    CSchulz almost 8 years
    Note: The rebase before merge is an Enterprise Edition feature.
  • Fancyoung
    Fancyoung over 3 years
    PS: the Fast-Forward setting only supported in EE or CE(10.1+)