diff --git a/lib/workers/repository/config-migration/branch/create.spec.ts b/lib/workers/repository/config-migration/branch/create.spec.ts
index 68c91f7895d6b5a8b5086e8142d2e7ec0c19eecb..c60671414718eee0be2eb134688b7d80c1a06936 100644
--- a/lib/workers/repository/config-migration/branch/create.spec.ts
+++ b/lib/workers/repository/config-migration/branch/create.spec.ts
@@ -1,6 +1,6 @@
 import { Fixtures } from '../../../../../test/fixtures';
 import { RenovateConfig, getConfig, platform } from '../../../../../test/util';
-import { commitFiles } from '../../../../util/git';
+import { checkoutBranch, commitFiles } from '../../../../util/git';
 import { createConfigMigrationBranch } from './create';
 import type { MigratedData } from './migrated-data';
 
@@ -18,12 +18,15 @@ describe('workers/repository/config-migration/branch/create', () => {
   beforeEach(() => {
     jest.clearAllMocks();
     config = getConfig();
+    config.baseBranch = 'dev';
+    config.defaultBranch = 'master';
     migratedConfigData = { content: renovateConfig, filename };
   });
 
   describe('createConfigMigrationBranch', () => {
     it('applies the default commit message', async () => {
       await createConfigMigrationBranch(config, migratedConfigData);
+      expect(checkoutBranch).toHaveBeenCalledWith(config.defaultBranch);
       expect(commitFiles).toHaveBeenCalledWith({
         branchName: 'renovate/migrate-config',
         files: [
@@ -43,6 +46,7 @@ describe('workers/repository/config-migration/branch/create', () => {
 
       await createConfigMigrationBranch(config, migratedConfigData);
 
+      expect(checkoutBranch).toHaveBeenCalledWith(config.defaultBranch);
       expect(platform.commitFiles).toHaveBeenCalledWith({
         branchName: 'renovate/migrate-config',
         files: [
@@ -64,6 +68,7 @@ describe('workers/repository/config-migration/branch/create', () => {
 
       await createConfigMigrationBranch(config, migratedConfigData);
 
+      expect(checkoutBranch).toHaveBeenCalledWith(config.defaultBranch);
       expect(commitFiles).toHaveBeenCalledWith({
         branchName: 'renovate/migrate-config',
         files: [
@@ -86,6 +91,7 @@ describe('workers/repository/config-migration/branch/create', () => {
         const message = `PREFIX: migrate config renovate.json`;
         await createConfigMigrationBranch(config, migratedConfigData);
 
+        expect(checkoutBranch).toHaveBeenCalledWith(config.defaultBranch);
         expect(commitFiles).toHaveBeenCalledWith({
           branchName: 'renovate/migrate-config',
           files: [
@@ -109,6 +115,7 @@ describe('workers/repository/config-migration/branch/create', () => {
         const message = `Migrate config renovate.json ${suffix}`;
         await createConfigMigrationBranch(config, migratedConfigData);
 
+        expect(checkoutBranch).toHaveBeenCalledWith(config.defaultBranch);
         expect(commitFiles).toHaveBeenCalledWith({
           branchName: 'renovate/migrate-config',
           files: [
@@ -133,6 +140,7 @@ describe('workers/repository/config-migration/branch/create', () => {
 
         await createConfigMigrationBranch(config, migratedConfigData);
 
+        expect(checkoutBranch).toHaveBeenCalledWith(config.defaultBranch);
         expect(commitFiles).toHaveBeenCalledWith({
           branchName: 'renovate/migrate-config',
           files: [
@@ -156,6 +164,7 @@ describe('workers/repository/config-migration/branch/create', () => {
 
         await createConfigMigrationBranch(config, migratedConfigData);
 
+        expect(checkoutBranch).toHaveBeenCalledWith(config.defaultBranch);
         expect(commitFiles).toHaveBeenCalledWith({
           branchName: 'renovate/migrate-config',
           files: [
diff --git a/lib/workers/repository/config-migration/branch/create.ts b/lib/workers/repository/config-migration/branch/create.ts
index e177384cb1b0fa3f65ee8917f2c49d5b77114c63..0e8bbe74dccfb1f18b17565cea5649152761f1c6 100644
--- a/lib/workers/repository/config-migration/branch/create.ts
+++ b/lib/workers/repository/config-migration/branch/create.ts
@@ -2,11 +2,12 @@ import { GlobalConfig } from '../../../../config/global';
 import type { RenovateConfig } from '../../../../config/types';
 import { logger } from '../../../../logger';
 import { commitAndPush } from '../../../../modules/platform/commit';
+import { checkoutBranch } from '../../../../util/git';
 import { getMigrationBranchName } from '../common';
 import { ConfigMigrationCommitMessageFactory } from './commit-message';
 import type { MigratedData } from './migrated-data';
 
-export function createConfigMigrationBranch(
+export async function createConfigMigrationBranch(
   config: Partial<RenovateConfig>,
   migratedConfigData: MigratedData
 ): Promise<string | null> {
@@ -28,6 +29,7 @@ export function createConfigMigrationBranch(
     return Promise.resolve(null);
   }
 
+  await checkoutBranch(config.defaultBranch!);
   return commitAndPush({
     branchName: getMigrationBranchName(config),
     files: [
diff --git a/lib/workers/repository/config-migration/branch/rebase.spec.ts b/lib/workers/repository/config-migration/branch/rebase.spec.ts
index 0fdc26170e06646bbdbe8981121c9c359cb2ff8b..81ab12b7f5e49456cbcc6b289df5818e8ba6768f 100644
--- a/lib/workers/repository/config-migration/branch/rebase.spec.ts
+++ b/lib/workers/repository/config-migration/branch/rebase.spec.ts
@@ -6,6 +6,7 @@ import {
   platform,
 } from '../../../../../test/util';
 import { GlobalConfig } from '../../../../config/global';
+import { checkoutBranch } from '../../../../util/git';
 import type { MigratedData } from './migrated-data';
 import { rebaseMigrationBranch } from './rebase';
 
@@ -34,12 +35,15 @@ describe('workers/repository/config-migration/branch/rebase', () => {
       config = {
         ...getConfig(),
         repository: 'some/repo',
+        baseBranch: 'dev',
+        defaultBranch: 'master',
       };
     });
 
     it('does not rebase modified branch', async () => {
       git.isBranchModified.mockResolvedValueOnce(true);
       await rebaseMigrationBranch(config, migratedConfigData);
+      expect(checkoutBranch).toHaveBeenCalledTimes(0);
       expect(git.commitFiles).toHaveBeenCalledTimes(0);
     });
 
@@ -48,12 +52,14 @@ describe('workers/repository/config-migration/branch/rebase', () => {
         .mockResolvedValueOnce(renovateConfig)
         .mockResolvedValueOnce(renovateConfig);
       await rebaseMigrationBranch(config, migratedConfigData);
+      expect(checkoutBranch).toHaveBeenCalledTimes(0);
       expect(git.commitFiles).toHaveBeenCalledTimes(0);
     });
 
     it('rebases migration branch', async () => {
       git.isBranchBehindBase.mockResolvedValueOnce(true);
       await rebaseMigrationBranch(config, migratedConfigData);
+      expect(checkoutBranch).toHaveBeenCalledWith(config.defaultBranch);
       expect(git.commitFiles).toHaveBeenCalledTimes(1);
     });
 
@@ -63,6 +69,7 @@ describe('workers/repository/config-migration/branch/rebase', () => {
       });
       git.isBranchBehindBase.mockResolvedValueOnce(true);
       await rebaseMigrationBranch(config, migratedConfigData);
+      expect(checkoutBranch).toHaveBeenCalledTimes(0);
       expect(git.commitFiles).toHaveBeenCalledTimes(0);
     });
 
@@ -70,6 +77,7 @@ describe('workers/repository/config-migration/branch/rebase', () => {
       config.platformCommit = true;
       git.isBranchBehindBase.mockResolvedValueOnce(true);
       await rebaseMigrationBranch(config, migratedConfigData);
+      expect(checkoutBranch).toHaveBeenCalledWith(config.defaultBranch);
       expect(platform.commitFiles).toHaveBeenCalledTimes(1);
     });
   });
diff --git a/lib/workers/repository/config-migration/branch/rebase.ts b/lib/workers/repository/config-migration/branch/rebase.ts
index 1da3459f0a4c85d45cfedd4b1e298fae41db50ad..06a3800915a6f881b4eea95eb5388c09756a5d2f 100644
--- a/lib/workers/repository/config-migration/branch/rebase.ts
+++ b/lib/workers/repository/config-migration/branch/rebase.ts
@@ -2,7 +2,11 @@ import { GlobalConfig } from '../../../../config/global';
 import type { RenovateConfig } from '../../../../config/types';
 import { logger } from '../../../../logger';
 import { commitAndPush } from '../../../../modules/platform/commit';
-import { getFile, isBranchModified } from '../../../../util/git';
+import {
+  checkoutBranch,
+  getFile,
+  isBranchModified,
+} from '../../../../util/git';
 import { getMigrationBranchName } from '../common';
 import { ConfigMigrationCommitMessageFactory } from './commit-message';
 import type { MigratedData } from './migrated-data';
@@ -37,6 +41,7 @@ export async function rebaseMigrationBranch(
   );
   const commitMessage = commitMessageFactory.getCommitMessage();
 
+  await checkoutBranch(config.defaultBranch!);
   return commitAndPush({
     branchName,
     files: [