diff --git a/lib/platform/gitlab/index.ts b/lib/platform/gitlab/index.ts
index 72a1cff999db475867c5a19aac3d2b144f2355d5..17e8a527fcb95d0b3da8f5d4bd3df308e5ce11cc 100644
--- a/lib/platform/gitlab/index.ts
+++ b/lib/platform/gitlab/index.ts
@@ -41,6 +41,7 @@ import {
   BRANCH_STATUS_SUCCESS,
 } from '../../constants/branch-constants';
 
+type MergeMethod = 'merge' | 'rebase_merge' | 'ff';
 const defaultConfigFile = configFileNames[0];
 let config: {
   storage: GitStorage;
@@ -53,6 +54,7 @@ let config: {
   prList: any[];
   issueList: any[];
   optimizeForDisabled: boolean;
+  mergeMethod: MergeMethod;
 } = {} as any;
 
 const defaults = {
@@ -137,6 +139,7 @@ export async function initRepo({
   config.repository = urlEscape(repository);
   config.gitPrivateKey = gitPrivateKey;
   config.localDir = localDir;
+
   let res: GotResponse<{
     archived: boolean;
     mirror: boolean;
@@ -146,6 +149,7 @@ export async function initRepo({
     forked_from_project: boolean;
     repository_access_level: 'disabled' | 'private' | 'enabled';
     merge_requests_access_level: 'disabled' | 'private' | 'enabled';
+    merge_method: MergeMethod;
   }>;
   try {
     res = await api.get(`projects/${config.repository}`);
@@ -198,6 +202,7 @@ export async function initRepo({
     }
     config.defaultBranch = res.body.default_branch;
     config.baseBranch = config.defaultBranch;
+    config.mergeMethod = res.body.merge_method;
     logger.debug(`${repository} default branch = ${config.baseBranch}`);
     // Discover our user email
     config.email = (await api.get(`user`)).body.email;
@@ -259,8 +264,8 @@ export async function initRepo({
   return repoConfig;
 }
 
-export function getRepoForceRebase(): boolean {
-  return false;
+export function getRepoForceRebase(): Promise<boolean> {
+  return Promise.resolve(config?.mergeMethod !== 'merge');
 }
 
 export async function setBaseBranch(
diff --git a/test/platform/gitlab/index.spec.ts b/test/platform/gitlab/index.spec.ts
index 2cca1521645fd6712a7489fabb07e55ca8fb0db2..50dd26aee63f23500fc80adcec093df7b95928f9 100644
--- a/test/platform/gitlab/index.spec.ts
+++ b/test/platform/gitlab/index.spec.ts
@@ -12,11 +12,11 @@ import {
   BRANCH_STATUS_PENDING,
   BRANCH_STATUS_SUCCESS,
 } from '../../../lib/constants/branch-constants';
-import { GotResponse } from '../../../lib/platform';
+import { GotResponse, Platform } from '../../../lib/platform';
 import { partial } from '../../util';
 
 describe('platform/gitlab', () => {
-  let gitlab: typeof import('../../../lib/platform/gitlab');
+  let gitlab: Platform;
   let api: jest.Mocked<typeof import('../../../lib/platform/gitlab/gl-got-wrapper').api>;
   let hostRules: jest.Mocked<typeof _hostRules>;
   let GitStorage: jest.Mocked<
@@ -305,8 +305,32 @@ describe('platform/gitlab', () => {
     });
   });
   describe('getRepoForceRebase', () => {
-    it('should return false', () => {
-      expect(gitlab.getRepoForceRebase()).toBe(false);
+    it('should return false', async () => {
+      api.get.mockResolvedValueOnce(
+        partial<GotResponse>({
+          body: {
+            default_branch: 'master',
+            http_url_to_repo: null,
+            merge_method: 'merge',
+          },
+        })
+      );
+      await initRepo({ repository: 'some/repo/project', token: 'some-token' });
+      expect(await gitlab.getRepoForceRebase()).toBe(false);
+    });
+
+    it('should return true', async () => {
+      api.get.mockResolvedValueOnce(
+        partial<GotResponse>({
+          body: {
+            default_branch: 'master',
+            http_url_to_repo: null,
+            merge_method: 'ff',
+          },
+        })
+      );
+      await initRepo({ repository: 'some/repo/project', token: 'some-token' });
+      expect(await gitlab.getRepoForceRebase()).toBe(true);
     });
   });
   describe('setBaseBranch(branchName)', () => {
@@ -1074,7 +1098,7 @@ describe('platform/gitlab', () => {
   describe('mergePr(pr)', () => {
     jest.resetAllMocks();
     it('merges the PR', async () => {
-      await gitlab.mergePr(1);
+      await gitlab.mergePr(1, undefined);
       expect(api.put.mock.calls.length).toEqual(1);
     });
   });