diff --git a/lib/config/options/index.ts b/lib/config/options/index.ts
index a28240c12eea6e4650064bfac0223e9201843c0e..6fd3ef2a76f26346496ef044a0179301f2f62efd 100644
--- a/lib/config/options/index.ts
+++ b/lib/config/options/index.ts
@@ -152,7 +152,8 @@ const options: RenovateOptions[] = [
   },
   {
     name: 'extends',
-    description: 'Configuration presets to use/extend.',
+    description:
+      'Configuration presets to use/extend. Note: does not work if configured in config.js.',
     stage: 'package',
     type: 'array',
     subType: 'string',
diff --git a/lib/workers/repository/init/merge.spec.ts b/lib/workers/repository/init/merge.spec.ts
index 464754b5033ccc6888318e5f2524c6fe7d4d0ba4..36c7a4076dc9b412a8f4eba2989c81c15a96a81e 100644
--- a/lib/workers/repository/init/merge.spec.ts
+++ b/lib/workers/repository/init/merge.spec.ts
@@ -185,28 +185,16 @@ describe('workers/repository/init/merge', () => {
     it('migrates nested config', async () => {
       git.getFileList.mockResolvedValue(['renovate.json']);
       fs.readLocalFile.mockResolvedValue('{}');
-      migrateAndValidate.migrateAndValidate.mockImplementation((_, c) =>
-        Promise.resolve({
-          ...c,
-          warnings: [],
-          errors: [],
-        })
-      );
-      migrate.migrateConfig.mockImplementation((c) => ({
+      migrateAndValidate.migrateAndValidate.mockResolvedValue({
+        warnings: [],
+        errors: [],
+      });
+      migrate.migrateConfig.mockReturnValueOnce({
         isMigrated: true,
-        migratedConfig: c,
-      }));
-      config.extends = [':automergeAll'];
-      config.packageRules = [{ extends: ['monorepo:react'] }];
-      const ret = await mergeRenovateConfig(config);
-      expect(ret).toMatchObject({
-        automerge: true,
-        packageRules: [
-          {
-            matchSourceUrlPrefixes: ['https://github.com/facebook/react'],
-          },
-        ],
+        migratedConfig: {},
       });
+      config.extends = [':automergeDisabled'];
+      expect(await mergeRenovateConfig(config)).toBeDefined();
     });
     it('continues if no errors', async () => {
       git.getFileList.mockResolvedValue(['package.json', '.renovaterc.json']);
diff --git a/lib/workers/repository/init/merge.ts b/lib/workers/repository/init/merge.ts
index d603978a6b190073f8df2aa254614b0632c10567..701697a7660fdeb4cb4d9c90feb5ab2166ec4317 100644
--- a/lib/workers/repository/init/merge.ts
+++ b/lib/workers/repository/init/merge.ts
@@ -177,13 +177,6 @@ export async function mergeRenovateConfig(
     ];
     delete returnConfig.extends;
   }
-  if (is.nonEmptyArray(returnConfig.packageRules)) {
-    configFileParsed.packageRules = [
-      ...returnConfig.packageRules,
-      ...(configFileParsed.packageRules || []),
-    ];
-    delete returnConfig.packageRules;
-  }
   checkForRepoConfigError(repoConfig);
   const migratedConfig = await migrateAndValidate(config, configFileParsed);
   if (migratedConfig.errors.length) {