diff --git a/lib/config/__snapshots__/index.spec.ts.snap b/lib/config/__snapshots__/index.spec.ts.snap
index 14a9feb09b1bf1647d80edd754a494aeb3c65614..06759fa5c078d48b07f0547542cb0bc88ebbaa7a 100644
--- a/lib/config/__snapshots__/index.spec.ts.snap
+++ b/lib/config/__snapshots__/index.spec.ts.snap
@@ -56,6 +56,7 @@ Object {
   "onboardingBranch": "renovate/configure",
   "onboardingPrTitle": "Configure Renovate",
   "persistRepoData": false,
+  "pinDigests": false,
   "platform": "github",
   "postUpdateOptions": Array [],
   "postUpgradeTasks": Object {
diff --git a/lib/config/definitions.ts b/lib/config/definitions.ts
index 6aa2dd7bfc81fa39633a6d7a1631a81ac44ec9c6..cd0eacac98ebd1a8baafa2d652213082a27e2984 100644
--- a/lib/config/definitions.ts
+++ b/lib/config/definitions.ts
@@ -870,7 +870,6 @@ const options: RenovateOptions[] = [
   {
     name: 'pinDigests',
     description: 'Whether to add digests to Dockerfile source images',
-    stage: 'package',
     type: 'boolean',
     default: false,
   },
diff --git a/lib/workers/branch/__snapshots__/auto-replace.spec.ts.snap b/lib/workers/branch/__snapshots__/auto-replace.spec.ts.snap
index aba6ee470ef45fec82ad7327b35305c66306ae7b..ee040deb4527e594152d91d8d795a1c0715d5815 100644
--- a/lib/workers/branch/__snapshots__/auto-replace.spec.ts.snap
+++ b/lib/workers/branch/__snapshots__/auto-replace.spec.ts.snap
@@ -1,5 +1,7 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
+exports[`workers/branch/auto-replace doAutoReplace handles a double attempt 1`] = `"     <script src=\\"https://cdnjs.cloudflare.com/ajax/libs/reactstrap/7.1.0/reactstrap.min.js\\">  <script src=\\"https://cdnjs.cloudflare.com/ajax/libs/reactstrap/7.1.1/reactstrap.min.js\\"> "`;
+
 exports[`workers/branch/auto-replace doAutoReplace handles already updated 1`] = `"     <script src=\\"https://cdnjs.cloudflare.com/ajax/libs/reactstrap/7.1.1/reactstrap.min.js\\">   "`;
 
 exports[`workers/branch/auto-replace doAutoReplace updates version and integrity 1`] = `"     <script src=\\"https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.11.1/katex.min.js\\" integrity=\\"sha256-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\\" crossorigin=\\"anonymous\\">   "`;
diff --git a/lib/workers/branch/auto-replace.spec.ts b/lib/workers/branch/auto-replace.spec.ts
index 09623bfa58a1fb0a56e716007b74e3a2c46e3e86..94743e9e5808c5ec7784c91c95192c7c393677b3 100644
--- a/lib/workers/branch/auto-replace.spec.ts
+++ b/lib/workers/branch/auto-replace.spec.ts
@@ -49,10 +49,24 @@ describe('workers/branch/auto-replace', () => {
       upgrade.lookupName = 'reactstrap/7.1.0/reactstrap.min.js';
       upgrade.currentValue = '7.1.0';
       upgrade.newValue = '7.1.1';
+      upgrade.newDigest = 'some-digest';
       upgrade.depIndex = 0;
       const res = await doAutoReplace(upgrade, src, parentBranch);
       expect(res).toMatchSnapshot();
     });
+    it('handles a double attempt', async () => {
+      const script =
+        '<script src="https://cdnjs.cloudflare.com/ajax/libs/reactstrap/7.1.0/reactstrap.min.js">';
+      const src = `     ${script}  ${script} `;
+      upgrade.baseDeps = extractPackageFile(src).deps;
+      upgrade.depName = 'reactstrap';
+      upgrade.lookupName = 'reactstrap/7.1.0/reactstrap.min.js';
+      upgrade.currentValue = '7.1.0';
+      upgrade.newValue = '7.1.1';
+      upgrade.depIndex = 1;
+      const res = await doAutoReplace(upgrade, src, parentBranch);
+      expect(res).toMatchSnapshot();
+    });
     it('handles already updated', async () => {
       const script =
         '<script src="https://cdnjs.cloudflare.com/ajax/libs/reactstrap/7.1.0/reactstrap.min.js">';
diff --git a/lib/workers/branch/auto-replace.ts b/lib/workers/branch/auto-replace.ts
index d31c85414962560a5323defebbc6837968ac17f2..11a7cb4597606532c489ce27ff3d67622ff44f02 100644
--- a/lib/workers/branch/auto-replace.ts
+++ b/lib/workers/branch/auto-replace.ts
@@ -10,7 +10,15 @@ export async function confirmIfDepUpdated(
   upgrade,
   newContent: string
 ): Promise<boolean> {
-  const { manager, packageFile, newValue, newDigest, depIndex } = upgrade;
+  const {
+    manager,
+    packageFile,
+    newValue,
+    newDigest,
+    depIndex,
+    currentDigest,
+    pinDigests,
+  } = upgrade;
   const extractPackageFile = get(manager, 'extractPackageFile');
   let newUpgrade;
   try {
@@ -23,13 +31,22 @@ export async function confirmIfDepUpdated(
   } catch (err) /* istanbul ignore next */ {
     logger.debug('Failed to parse newContent');
   }
-  if (
-    newUpgrade &&
-    newUpgrade.currentValue === newValue &&
-    (!newDigest || newUpgrade.currentDigest === newDigest)
-  ) {
+  if (!newUpgrade) {
+    return false;
+  }
+  if (newUpgrade.currentValue !== newValue) {
+    return false;
+  }
+  if (!newDigest) {
+    return true;
+  }
+  if (newUpgrade.currentDigest === newDigest) {
     return true;
   }
+  if (!currentDigest && !pinDigests) {
+    return true;
+  }
+  // istanbul ignore next
   return false;
 }