diff --git a/project.py b/project.py
index 069cc71..d887a55 100644
--- a/project.py
+++ b/project.py
@@ -1467,7 +1467,12 @@
         self.revisionId = revisionId
 
     def Sync_LocalHalf(
-        self, syncbuf, force_sync=False, submodules=False, errors=None
+        self,
+        syncbuf,
+        force_sync=False,
+        submodules=False,
+        errors=None,
+        verbose=False,
     ):
         """Perform only the local IO portion of the sync process.
 
@@ -1548,7 +1553,7 @@
                     return
             else:
                 lost = self._revlist(not_rev(revid), HEAD)
-                if lost:
+                if lost and verbose:
                     syncbuf.info(self, "discarding %d commits", len(lost))
 
             try:
@@ -1738,7 +1743,7 @@
             self.bare_git.rev_parse("FETCH_HEAD"),
         )
 
-    def DeleteWorktree(self, quiet=False, force=False):
+    def DeleteWorktree(self, verbose=False, force=False):
         """Delete the source checkout and any other housekeeping tasks.
 
         This currently leaves behind the internal .repo/ cache state.  This
@@ -1747,7 +1752,7 @@
         at some point.
 
         Args:
-            quiet: Whether to hide normal messages.
+            verbose: Whether to show verbose messages.
             force: Always delete tree even if dirty.
 
         Returns:
@@ -1768,7 +1773,7 @@
                 logger.error(msg)
                 raise DeleteDirtyWorktreeError(msg, project=self)
 
-        if not quiet:
+        if verbose:
             print(f"{self.RelPath(local=False)}: Deleting obsolete checkout.")
 
         # Unlock and delink from the main worktree.  We don't use git's worktree
@@ -3900,13 +3905,13 @@
 class ManifestProject(MetaProject):
     """The MetaProject for manifests."""
 
-    def MetaBranchSwitch(self, submodules=False):
+    def MetaBranchSwitch(self, submodules=False, verbose=False):
         """Prepare for manifest branch switch."""
 
         # detach and delete manifest branch, allowing a new
         # branch to take over
         syncbuf = SyncBuffer(self.config, detach_head=True)
-        self.Sync_LocalHalf(syncbuf, submodules=submodules)
+        self.Sync_LocalHalf(syncbuf, submodules=submodules, verbose=verbose)
         syncbuf.Finish()
 
         return (
@@ -4437,10 +4442,10 @@
                 return False
 
             if manifest_branch:
-                self.MetaBranchSwitch(submodules=submodules)
+                self.MetaBranchSwitch(submodules=submodules, verbose=verbose)
 
             syncbuf = SyncBuffer(self.config)
-            self.Sync_LocalHalf(syncbuf, submodules=submodules)
+            self.Sync_LocalHalf(syncbuf, submodules=submodules, verbose=verbose)
             syncbuf.Finish()
 
             if is_new or self.CurrentBranch is None:
diff --git a/subcmds/sync.py b/subcmds/sync.py
index b723662..ac6a451 100644
--- a/subcmds/sync.py
+++ b/subcmds/sync.py
@@ -956,12 +956,13 @@
 
         return _FetchMainResult(all_projects)
 
-    def _CheckoutOne(self, detach_head, force_sync, project):
+    def _CheckoutOne(self, detach_head, force_sync, verbose, project):
         """Checkout work tree for one project
 
         Args:
             detach_head: Whether to leave a detached HEAD.
             force_sync: Force checking out of the repo.
+            verbose: Whether to show verbose messages.
             project: Project object for the project to checkout.
 
         Returns:
@@ -975,7 +976,7 @@
         errors = []
         try:
             project.Sync_LocalHalf(
-                syncbuf, force_sync=force_sync, errors=errors
+                syncbuf, force_sync=force_sync, errors=errors, verbose=verbose
             )
             success = syncbuf.Finish()
         except GitError as e:
@@ -1042,7 +1043,7 @@
         proc_res = self.ExecuteInParallel(
             opt.jobs_checkout,
             functools.partial(
-                self._CheckoutOne, opt.detach_head, opt.force_sync
+                self._CheckoutOne, opt.detach_head, opt.force_sync, opt.verbose
             ),
             all_projects,
             callback=_ProcessResults,
@@ -1288,7 +1289,7 @@
                             groups=None,
                         )
                         project.DeleteWorktree(
-                            quiet=opt.quiet, force=opt.force_remove_dirty
+                            verbose=opt.verbose, force=opt.force_remove_dirty
                         )
 
         new_project_paths.sort()
@@ -1533,7 +1534,10 @@
             syncbuf = SyncBuffer(mp.config)
             start = time.time()
             mp.Sync_LocalHalf(
-                syncbuf, submodules=mp.manifest.HasSubmodules, errors=errors
+                syncbuf,
+                submodules=mp.manifest.HasSubmodules,
+                errors=errors,
+                verbose=opt.verbose,
             )
             clean = syncbuf.Finish()
             self.event_log.AddSync(
