diff --git a/lib/config/massage.spec.ts b/lib/config/massage.spec.ts
index 0d5ac6b4fd1adb7534ffcf550675fc9ebe7d814e..117b3e5a7627bc7e7e110ea94239cc198dc25ee6 100644
--- a/lib/config/massage.spec.ts
+++ b/lib/config/massage.spec.ts
@@ -46,6 +46,21 @@ describe('config/massage', () => {
       expect(res.packageRules).toHaveLength(3);
     });
 
+    it('filters packageRules with only match/exclude', () => {
+      const config: RenovateConfig = {
+        packageRules: [
+          {
+            matchBaseBranches: ['main'],
+            major: {
+              enabled: true,
+            },
+          },
+        ],
+      };
+      const res = massage.massageConfig(config);
+      expect(res.packageRules).toHaveLength(1);
+    });
+
     it('does not massage lockFileMaintenance', () => {
       const config: RenovateConfig = {
         packageRules: [
diff --git a/lib/config/massage.ts b/lib/config/massage.ts
index ef3fff325a9ec79f21217f7856fccd3af32aea68..094237c11bfdb27ad8d3574396062e791d6d553b 100644
--- a/lib/config/massage.ts
+++ b/lib/config/massage.ts
@@ -40,7 +40,7 @@ export function massageConfig(config: RenovateConfig): RenovateConfig {
     }
   }
   if (is.nonEmptyArray(massagedConfig.packageRules)) {
-    const newRules: PackageRule[] = [];
+    let newRules: PackageRule[] = [];
     const updateTypes: UpdateType[] = [
       'major',
       'minor',
@@ -74,6 +74,17 @@ export function massageConfig(config: RenovateConfig): RenovateConfig {
         delete rule[updateType];
       });
     }
+    newRules = newRules.filter((rule) => {
+      if (
+        Object.keys(rule).every(
+          (key) => key.startsWith('match') || key.startsWith('exclude')
+        )
+      ) {
+        // Exclude rules which contain only match or exclude options
+        return false;
+      }
+      return true;
+    });
     massagedConfig.packageRules = newRules;
   }
   return massagedConfig;