diff --git a/lib/workers/global/initialize.ts b/lib/workers/global/initialize.ts
index f159bfdc7c449748cc3da22603a558c9a11dcbe0..7eafa5e0c3b2bc2009ac42b6a2093e6adab40434 100644
--- a/lib/workers/global/initialize.ts
+++ b/lib/workers/global/initialize.ts
@@ -28,6 +28,12 @@ async function setDirectories(input: RenovateConfig): Promise<RenovateConfig> {
   return config;
 }
 
+function limitCommitsPerRun(config: RenovateConfig): void {
+  let limit = config.prCommitsPerRunLimit;
+  limit = typeof limit === 'number' && limit > 0 ? limit : null;
+  setMaxLimit(Limit.Commits, limit);
+}
+
 export async function globalInitialize(
   config_: RenovateConfig
 ): Promise<RenovateConfig> {
@@ -35,7 +41,7 @@ export async function globalInitialize(
   config = await initPlatform(config);
   config = await setDirectories(config);
   packageCache.init(config);
-  setMaxLimit(Limit.Commits, config.prCommitsPerRunLimit);
+  limitCommitsPerRun(config);
   setEmojiConfig(config);
   return config;
 }
diff --git a/lib/workers/global/limits.spec.ts b/lib/workers/global/limits.spec.ts
index d2a4ad8b6b2ae5e2ee77a4675d8daa6da8c59ccd..8714b928698fd29c34797e777469725db0c25f3d 100644
--- a/lib/workers/global/limits.spec.ts
+++ b/lib/workers/global/limits.spec.ts
@@ -37,7 +37,28 @@ describe('lib/workers/global/limits', () => {
   it('increments undefined', () => {
     incLimitedValue(Limit.Commits);
     expect(isLimitReached(Limit.Commits)).toBe(false);
+  });
+
+  it('resets counter', () => {
     setMaxLimit(Limit.Commits, 1);
+    incLimitedValue(Limit.Commits);
     expect(isLimitReached(Limit.Commits)).toBe(true);
+    setMaxLimit(Limit.Commits, 1);
+    expect(isLimitReached(Limit.Commits)).toBe(false);
+  });
+
+  it('resets limit', () => {
+    setMaxLimit(Limit.Commits, 1);
+    incLimitedValue(Limit.Commits);
+    expect(isLimitReached(Limit.Commits)).toBe(true);
+    setMaxLimit(Limit.Commits, null);
+    expect(isLimitReached(Limit.Commits)).toBe(false);
+  });
+
+  it('sets non-positive limit as reached', () => {
+    setMaxLimit(Limit.Commits, 0);
+    expect(isLimitReached(Limit.Commits)).toBeTrue();
+    setMaxLimit(Limit.Commits, -1000);
+    expect(isLimitReached(Limit.Commits)).toBeTrue();
   });
 });
diff --git a/lib/workers/global/limits.ts b/lib/workers/global/limits.ts
index 5bb983bb09aa823e0845972a501a11ed81fc47c9..04d194c72d22f7d4c4ffdf9368a96c5e02f300d2 100644
--- a/lib/workers/global/limits.ts
+++ b/lib/workers/global/limits.ts
@@ -15,15 +15,10 @@ export function resetAllLimits(): void {
   limits.clear();
 }
 
-export function setMaxLimit(key: Limit, max: unknown): void {
-  const maxVal = typeof max === 'number' && max > 0 ? max : null;
-  logger.debug(`${key} limit = ${maxVal}`);
-  const limit = limits.get(key);
-  limits.set(key, {
-    current: 0,
-    ...limit,
-    max: maxVal,
-  });
+export function setMaxLimit(key: Limit, val: unknown): void {
+  const max = typeof val === 'number' ? Math.max(0, val) : null;
+  limits.set(key, { current: 0, max });
+  logger.debug(`${key} limit = ${max}`);
 }
 
 export function incLimitedValue(key: Limit, incBy = 1): void {