diff --git src/wp-admin/theme-install.php src/wp-admin/theme-install.php
index 43f105f377..63a73d0f07 100644
--- src/wp-admin/theme-install.php
+++ src/wp-admin/theme-install.php
@@ -123,6 +123,25 @@ get_current_screen()->set_help_sidebar(
 
 include(ABSPATH . 'wp-admin/admin-header.php');
 
+$is_customize_preview_available = true;
+
+/** This filter is documented in wp-includes/class-wp-customize-manager.php */
+if ( ! apply_filters( 'customize_changeset_branching', false ) ) {
+	$is_customize_preview_available = count( get_posts( array(
+		'post_status' => array_diff( get_post_stati(), array( 'auto-draft', 'publish', 'trash', 'inherit', 'private' ) ),
+		'author' => 'any',
+		'posts_per_page' => 1,
+		'order' => 'DESC',
+		'orderby' => 'date',
+		'post_type' => 'customize_changeset',
+		'no_found_rows' => true,
+		'cache_results' => true,
+		'update_post_meta_cache' => false,
+		'update_post_term_cache' => false,
+		'lazy_load_term_meta' => false,
+	) ) ) === 0;
+}
+
 ?>
 <div class="wrap">
 	<h1 class="wp-heading-inline"><?php echo esc_html( $title ); ?></h1>
@@ -150,6 +169,12 @@ include(ABSPATH . 'wp-admin/admin-header.php');
 		<p><?php _e( 'The Theme Installer screen requires JavaScript.' ); ?></p>
 	</div>
 
+	<?php if ( ! $is_customize_preview_available ) : ?>
+		<div class="notice notice-info">
+			<p><?php _e( 'Live preview for inactive themes is not currently available because there are drafted or scheduled changes for the active theme.' ); ?></p>
+		</div>
+	<?php endif; ?>
+
 	<div class="upload-theme">
 	<?php install_themes_upload(); ?>
 	</div>
@@ -277,7 +302,7 @@ if ( $tab ) {
 				<# if ( data.activate_url ) { #>
 					<a class="button button-primary activate" href="{{ data.activate_url }}" aria-label="<?php echo esc_attr( $aria_label ); ?>"><?php _e( 'Activate' ); ?></a>
 				<# } #>
-				<# if ( data.customize_url ) { #>
+				<# if ( data.customize_url && <?php echo wp_json_encode( $is_customize_preview_available ); ?> ) { #>
 					<a class="button load-customize" href="{{ data.customize_url }}"><?php _e( 'Live Preview' ); ?></a>
 				<# } else { #>
 					<button class="button preview install-theme-preview"><?php _e( 'Preview' ); ?></button>
diff --git src/wp-admin/themes.php src/wp-admin/themes.php
index 9218983239..c5a8a2deb8 100644
--- src/wp-admin/themes.php
+++ src/wp-admin/themes.php
@@ -148,6 +148,26 @@ wp_enqueue_script( 'theme' );
 wp_enqueue_script( 'updates' );
 
 require_once( ABSPATH . 'wp-admin/admin-header.php' );
+
+$is_customize_preview_available = true;
+
+/** This filter is documented in wp-includes/class-wp-customize-manager.php */
+if ( ! apply_filters( 'customize_changeset_branching', false ) ) {
+	$is_customize_preview_available = count( get_posts( array(
+		'post_status' => array_diff( get_post_stati(), array( 'auto-draft', 'publish', 'trash', 'inherit', 'private' ) ),
+		'author' => 'any',
+		'posts_per_page' => 1,
+		'order' => 'DESC',
+		'orderby' => 'date',
+		'post_type' => 'customize_changeset',
+		'no_found_rows' => true,
+		'cache_results' => true,
+		'update_post_meta_cache' => false,
+		'update_post_term_cache' => false,
+		'lazy_load_term_meta' => false,
+	) ) ) === 0;
+}
+
 ?>
 
 <div class="wrap">
@@ -178,6 +198,14 @@ if ( ! validate_current_theme() || isset( $_GET['broken'] ) ) : ?>
 <?php
 endif;
 
+if ( ! $is_customize_preview_available ) :
+	?>
+	<div class="notice notice-info">
+		<p><?php _e( 'Live preview for inactive themes is not currently available because there are drafted or scheduled changes for the active theme.' ); ?></p>
+	</div>
+	<?php
+endif;
+
 $ct = wp_get_theme();
 
 if ( $ct->errors() && ( ! is_multisite() || current_user_can( 'manage_network_themes' ) ) ) {
@@ -296,7 +324,7 @@ foreach ( $themes as $theme ) :
 			$aria_label = sprintf( _x( 'Activate %s', 'theme' ), '{{ data.name }}' );
 			?>
 			<a class="button activate" href="<?php echo $theme['actions']['activate']; ?>" aria-label="<?php echo esc_attr( $aria_label ); ?>"><?php _e( 'Activate' ); ?></a>
-			<?php if ( current_user_can( 'edit_theme_options' ) && current_user_can( 'customize' ) ) { ?>
+			<?php if ( current_user_can( 'edit_theme_options' ) && current_user_can( 'customize' ) && $is_customize_preview_available ) { ?>
 				<a class="button button-primary load-customize hide-if-no-customize" href="<?php echo $theme['actions']['customize']; ?>"><?php _e( 'Live Preview' ); ?></a>
 			<?php } ?>
 		<?php } ?>
@@ -431,7 +459,9 @@ $can_install = current_user_can( 'install_themes' );
 				$aria_label = sprintf( _x( 'Activate %s', 'theme' ), '{{ data.name }}' );
 				?>
 				<a class="button activate" href="{{{ data.actions.activate }}}" aria-label="<?php echo $aria_label; ?>"><?php _e( 'Activate' ); ?></a>
-				<a class="button button-primary load-customize hide-if-no-customize" href="{{{ data.actions.customize }}}"><?php _e( 'Live Preview' ); ?></a>
+				<?php if ( $is_customize_preview_available ) : ?>
+					<a class="button button-primary load-customize hide-if-no-customize" href="{{{ data.actions.customize }}}"><?php _e( 'Live Preview' ); ?></a>
+				<?php endif; ?>
 			<# } #>
 		</div>
 	</div>
@@ -492,7 +522,9 @@ $can_install = current_user_can( 'install_themes' );
 				<# if ( data.actions.activate ) { #>
 					<a href="{{{ data.actions.activate }}}" class="button activate" aria-label="<?php echo $aria_label; ?>"><?php _e( 'Activate' ); ?></a>
 				<# } #>
-				<a href="{{{ data.actions.customize }}}" class="button button-primary load-customize hide-if-no-customize"><?php _e( 'Live Preview' ); ?></a>
+				<?php if ( $is_customize_preview_available ) : ?>
+					<a href="{{{ data.actions.customize }}}" class="button button-primary load-customize hide-if-no-customize"><?php _e( 'Live Preview' ); ?></a>
+				<?php endif; ?>
 			</div>
 
 			<# if ( ! data.active && data.actions['delete'] ) { #>
diff --git src/wp-includes/class-wp-customize-manager.php src/wp-includes/class-wp-customize-manager.php
index 12256d2173..a063e3e148 100644
--- src/wp-includes/class-wp-customize-manager.php
+++ src/wp-includes/class-wp-customize-manager.php
@@ -782,11 +782,10 @@ final class WP_Customize_Manager {
 		 *
 		 * @since 4.9.0
 		 *
-		 * @param bool                 $allow_branching Whether branching is allowed. If `false`, the default,
-		 *                                              then only one saved changeset exists at a time.
-		 * @param WP_Customize_Manager $wp_customize    Manager instance.
+		 * @param bool $allow_branching Whether branching is allowed. If `false`, the default,
+		 *                              then only one saved changeset exists at a time.
 		 */
-		$this->branching = apply_filters( 'customize_changeset_branching', $this->branching, $this );
+		$this->branching = apply_filters( 'customize_changeset_branching', $this->branching );
 
 		return $this->branching;
 	}
