diff --git a/lib/manager/npm/post-update/__snapshots__/yarn.spec.ts.snap b/lib/manager/npm/post-update/__snapshots__/yarn.spec.ts.snap
index b6faad3034115dfaf5b8c4a9075cb9ca8c2abf24..117b963fb19d028c4c73e40a4c01b5fb77a98503 100644
--- a/lib/manager/npm/post-update/__snapshots__/yarn.spec.ts.snap
+++ b/lib/manager/npm/post-update/__snapshots__/yarn.spec.ts.snap
@@ -458,7 +458,7 @@ Array [
     },
   },
   Object {
-    "cmd": "yarn up some-dep",
+    "cmd": "yarn up some-dep@^1.0.0",
     "options": Object {
       "cwd": "some-dir",
       "encoding": "utf-8",
diff --git a/lib/manager/npm/post-update/yarn.spec.ts b/lib/manager/npm/post-update/yarn.spec.ts
index c4afb5bd4c147ee47bb751939b3ee6b559253873..926b6c189ea68d2885a88e52e72cdcac4f4254cf 100644
--- a/lib/manager/npm/post-update/yarn.spec.ts
+++ b/lib/manager/npm/post-update/yarn.spec.ts
@@ -84,6 +84,7 @@ describe(getName(__filename), () => {
       const res = await yarnHelper.generateLockFile('some-dir', {}, config, [
         {
           depName: 'some-dep',
+          newValue: '^1.0.0',
           isLockfileUpdate: true,
         },
       ]);
diff --git a/lib/manager/npm/post-update/yarn.ts b/lib/manager/npm/post-update/yarn.ts
index c8e61624b14b5a95c3144798dde9bb33eb3e78fa..d91b73b70a563970eae2c852731ed774d42f23c7 100644
--- a/lib/manager/npm/post-update/yarn.ts
+++ b/lib/manager/npm/post-update/yarn.ts
@@ -119,16 +119,25 @@ export async function generateLockFile(
     commands.push(`yarn install ${cmdOptions}`.trim());
 
     // rangeStrategy = update-lockfile
-    const lockUpdates = upgrades
-      .filter((upgrade) => upgrade.isLockfileUpdate)
-      .map((upgrade) => upgrade.depName); // note - this can hit a yarn bug, see https://github.com/yarnpkg/yarn/issues/8236
+    const lockUpdates = upgrades.filter((upgrade) => upgrade.isLockfileUpdate);
     if (lockUpdates.length) {
       logger.debug('Performing lockfileUpdate (yarn)');
-      commands.push(
-        `yarn ${isYarn1 ? 'upgrade' : 'up'} ${lockUpdates.join(
-          ' '
-        )} ${cmdOptions}`.trim()
-      );
+      if (isYarn1) {
+        // `yarn upgrade` updates based on the version range specified in the package file
+        // note - this can hit a yarn bug, see https://github.com/yarnpkg/yarn/issues/8236
+        commands.push(
+          `yarn upgrade ${lockUpdates
+            .map((update) => update.depName)
+            .join(' ')} ${cmdOptions}`.trim()
+        );
+      } else {
+        // `yarn up` updates to the latest release, so the range should be specified
+        commands.push(
+          `yarn up ${lockUpdates
+            .map((update) => `${update.depName}@${update.newValue}`)
+            .join(' ')}`
+        );
+      }
     }
 
     // postUpdateOptions