diff --git a/node_modules/@changesets/cli/dist/cli.cjs.dev.js b/node_modules/@changesets/cli/dist/cli.cjs.dev.js
index f771824..9ea7f20 100644
--- a/node_modules/@changesets/cli/dist/cli.cjs.dev.js
+++ b/node_modules/@changesets/cli/dist/cli.cjs.dev.js
@@ -794,7 +794,7 @@ async function publishPackages({
     token: otp,
     isRequired: Promise.resolve(true)
   };
-  const unpublishedPackagesInfo = await getUnpublishedPackages(publicPackages, preState);
+  const unpublishedPackagesInfo = await getUnpublishedPackages(packages, preState);
 
   if (unpublishedPackagesInfo.length === 0) {
     logger.warn("No unpublished packages to publish");
@@ -810,20 +810,29 @@ async function publishAPackage(pkg, access, twoFactorState, tag) {
   const {
     name,
     version,
-    publishConfig
+    publishConfig,
+    private: isPrivate
   } = pkg.packageJson;
   const localAccess = publishConfig && publishConfig.access;
-  logger.info(`Publishing ${chalk__default['default'].cyan(`"${name}"`)} at ${chalk__default['default'].green(`"${version}"`)}`);
-  const publishDir = publishConfig && publishConfig.directory ? path.join(pkg.dir, publishConfig.directory) : pkg.dir;
-  const publishConfirmation = await publish(name, {
-    cwd: publishDir,
-    access: localAccess || access,
-    tag
-  }, twoFactorState);
+  let published;
+
+  if (!isPrivate) {
+    logger.info(`Publishing ${chalk__default['default'].cyan(`"${name}"`)} at ${chalk__default['default'].green(`"${version}"`)}`);
+    const publishDir = publishConfig && publishConfig.directory ? path.join(pkg.dir, publishConfig.directory) : pkg.dir;
+    const publishConfirmation = await publish(name, {
+      cwd: publishDir,
+      access: localAccess || access,
+      tag
+    }, twoFactorState);
+    published = publishConfirmation.published;
+  } else {
+    published = true;
+  }
+
   return {
     name,
     newVersion: version,
-    published: publishConfirmation.published
+    published
   };
 }
 
@@ -940,8 +949,14 @@ async function run(cwd, {
     if (tool !== "root") {
       for (const pkg of successful) {
         const tag = `${pkg.name}@${pkg.newVersion}`;
-        logger.log("New tag: ", tag);
-        await git.tag(tag, cwd);
+        const isMissingTag = !(await git.tagExists(tag));
+
+        if (isMissingTag) {
+          logger.log("New tag: ", tag);
+          await git.tag(tag, cwd);
+        } else {
+          logger.log("Skipping existing tag: ", tag);
+        }
       }
     } else {
       const tag = `v${successful[0].newVersion}`;
