diff --git a/lib/workers/branch/index.spec.ts b/lib/workers/branch/index.spec.ts
index ac74e0efe3288bfe42fdc9f00755a57fe2692016..418d9fdc90ee97d7fb4639eb0ea99078a24cbfda 100644
--- a/lib/workers/branch/index.spec.ts
+++ b/lib/workers/branch/index.spec.ts
@@ -24,6 +24,7 @@ import type { EnsurePrResult } from '../pr';
 import * as _prAutomerge from '../pr/automerge';
 import type { Pr } from '../repository/onboarding/branch/check';
 import type { BranchConfig, BranchUpgradeConfig } from '../types';
+import { BranchResult } from '../types';
 import * as _automerge from './automerge';
 import * as _checkExisting from './check-existing';
 import * as _commit from './commit';
@@ -1243,5 +1244,20 @@ describe(getName(), () => {
         ).toString()
       ).toBe('modified file content');
     });
+    it('returns when rebaseWhen=never', async () => {
+      getUpdated.getUpdatedPackageFiles.mockResolvedValueOnce({
+        ...updatedPackageFiles,
+      });
+      npmPostExtract.getAdditionalFiles.mockResolvedValueOnce({
+        artifactErrors: [],
+        updatedArtifacts: [],
+      });
+      git.branchExists.mockReturnValue(true);
+      commit.commitFilesToBranch.mockResolvedValueOnce(null);
+      expect(
+        await branchWorker.processBranch({ ...config, rebaseWhen: 'never' })
+      ).toMatchObject({ result: BranchResult.NoWork });
+      expect(commit.commitFilesToBranch).not.toHaveBeenCalled();
+    });
   });
 });
diff --git a/lib/workers/branch/index.ts b/lib/workers/branch/index.ts
index df50fb0dce883ff52efdb32930085a29b1caf03f..393fdce2379db414089e51192d430a1bb38bb8f9 100644
--- a/lib/workers/branch/index.ts
+++ b/lib/workers/branch/index.ts
@@ -391,10 +391,16 @@ export async function processBranch(
         });
       }
     }
-    config.forceCommit =
-      !!dependencyDashboardCheck ||
-      config.rebaseRequested ||
-      branchPr?.isConflicted;
+    const forcedManually = !!dependencyDashboardCheck || config.rebaseRequested;
+    if (!forcedManually && config.rebaseWhen === 'never') {
+      logger.debug(`Skipping commit (rebaseWhen=never)`);
+      return {
+        branchExists,
+        prNo: branchPr?.number,
+        result: BranchResult.NoWork,
+      };
+    }
+    config.forceCommit = forcedManually || branchPr?.isConflicted;
     const commitSha = await commitFilesToBranch(config);
     // istanbul ignore if
     if (branchPr && platform.refreshPr) {