diff --git src/wp-includes/default-filters.php src/wp-includes/default-filters.php
index a446eed1c2..9c65467080 100644
--- src/wp-includes/default-filters.php
+++ src/wp-includes/default-filters.php
@@ -401,6 +401,8 @@ add_action( 'plugins_loaded', 'wp_maybe_load_embeds', 0 );
 add_action( 'shutdown', 'wp_ob_end_flush_all', 1 );
 // Create a revision whenever a post is updated.
 add_action( 'post_updated', 'wp_save_post_revision', 10, 1 );
+// Fired in `wp_transition_post_status` for newly created posts with status 'publish'.
+add_action( 'new_to_publish', 'wp_save_post_revision', 10, 1 );
 add_action( 'publish_post', '_publish_post_hook', 5, 1 );
 add_action( 'transition_post_status', '_transition_post_status', 5, 3 );
 add_action( 'transition_post_status', '_update_term_count_on_transition_post_status', 10, 3 );
diff --git src/wp-includes/theme.php src/wp-includes/theme.php
index a7bc431c37..1770e6cb52 100644
--- src/wp-includes/theme.php
+++ src/wp-includes/theme.php
@@ -2017,15 +2017,8 @@ function wp_update_custom_css_post( $css, $args = array() ) {
 	} else {
 		$r = wp_insert_post( wp_slash( $post_data ), true );
 
-		if ( ! is_wp_error( $r ) ) {
-			if ( get_stylesheet() === $args['stylesheet'] ) {
-				set_theme_mod( 'custom_css_post_id', $r );
-			}
-
-			// Trigger creation of a revision. This should be removed once #30854 is resolved.
-			if ( 0 === count( wp_get_post_revisions( $r ) ) ) {
-				wp_save_post_revision( $r );
-			}
+		if ( ! is_wp_error( $r ) && get_stylesheet() === $args['stylesheet'] ) {
+			set_theme_mod( 'custom_css_post_id', $r );
 		}
 	}
 
diff --git tests/phpunit/tests/post/revisions.php tests/phpunit/tests/post/revisions.php
index 35e43f18ae..0cb0c6bffd 100644
--- tests/phpunit/tests/post/revisions.php
+++ tests/phpunit/tests/post/revisions.php
@@ -539,6 +539,8 @@ class Tests_Post_Revisions extends WP_UnitTestCase {
 
 		$revisions = wp_get_post_revisions( $post['ID'] );
 
+		array_unshift( $revision_ids, reset( $revisions )->ID );
+
 		$this->assertSame( $revision_ids, array_values( wp_list_pluck( $revisions, 'ID' ) ) );
 	}
 
@@ -574,6 +576,8 @@ class Tests_Post_Revisions extends WP_UnitTestCase {
 
 		$revisions = wp_get_post_revisions( $post['ID'] );
 
+		array_unshift( $revision_ids, reset( $revisions )->ID );
+
 		$this->assertSame( $revision_ids, array_values( wp_list_pluck( $revisions, 'ID' ) ) );
 	}
 
@@ -654,4 +658,36 @@ class Tests_Post_Revisions extends WP_UnitTestCase {
 
 		$this->assertWPError( $revision );
 	}
+
+	/**
+	 * @ticket 30854
+	 */
+	function test_wp_first_revision_is_not_lost() {
+		$post = self::factory()->post->create_and_get(
+			array(
+				'post_title'   => 'some-post',
+				'post_type'    => 'post',
+				'post_content' => 'Initial Content',
+			)
+		);
+
+		wp_update_post(
+			array(
+				'ID'           => $post->ID,
+				'post_content' => 'Update #1',
+			)
+		);
+
+		wp_update_post(
+			array(
+				'ID'           => $post->ID,
+				'post_content' => 'Update #2',
+			)
+		);
+
+		$revisions         = wp_get_post_revisions( $post->ID );
+		$earliest_revision = end( $revisions );
+
+		$this->assertEquals( 'Initial Content', $earliest_revision->post_content );
+	}
 }
diff --git tests/phpunit/tests/xmlrpc/wp/getRevisions.php tests/phpunit/tests/xmlrpc/wp/getRevisions.php
index b7a4667165..03814bc7bf 100644
--- tests/phpunit/tests/xmlrpc/wp/getRevisions.php
+++ tests/phpunit/tests/xmlrpc/wp/getRevisions.php
@@ -42,7 +42,7 @@ class Tests_XMLRPC_wp_getRevisions extends WP_XMLRPC_UnitTestCase {
 
 		$result = $this->myxmlrpcserver->wp_getRevisions( array( 1, 'editor', 'editor', $post_id ) );
 		$this->assertIsArray( $result );
-		$this->assertCount( 1, $result );
+		$this->assertCount( 2, $result );
 
 		wp_insert_post(
 			array(
