diff --git a/src/wp-includes/default-filters.php b/src/wp-includes/default-filters.php
index e8e0a84d45..a606d52bdf 100644
--- a/src/wp-includes/default-filters.php
+++ b/src/wp-includes/default-filters.php
@@ -380,6 +380,7 @@ 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 );
+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 a/tests/phpunit/tests/post/revisions.php b/tests/phpunit/tests/post/revisions.php
index 95efe83578..0d05bad182 100644
--- a/tests/phpunit/tests/post/revisions.php
+++ b/tests/phpunit/tests/post/revisions.php
@@ -234,7 +234,7 @@ class Tests_Post_Revisions extends WP_UnitTestCase {
 		);
 
 		$revisions = wp_get_post_revisions( $post_id );
-		$this->assertCount( 1, $revisions );
+		$this->assertCount( 2, $revisions );
 		$this->assertTrue( user_can( self::$editor_user_id, 'read_post', $post_id ) );
 
 		foreach ( $revisions as $revision ) {
@@ -267,7 +267,7 @@ class Tests_Post_Revisions extends WP_UnitTestCase {
 		);
 
 		$revisions = wp_get_post_revisions( $post_id );
-		$this->assertCount( 1, $revisions );
+		$this->assertCount( 2, $revisions );
 		foreach ( $revisions as $revision ) {
 			$this->assertTrue( user_can( self::$editor_user_id, 'edit_post', $revision->post_parent ) );
 		}
@@ -305,7 +305,7 @@ class Tests_Post_Revisions extends WP_UnitTestCase {
 
 		// Diff checks if you can read both left and right revisions.
 		$revisions = wp_get_post_revisions( $post_id );
-		$this->assertCount( 2, $revisions );
+		$this->assertCount( 3, $revisions );
 		foreach ( $revisions as $revision ) {
 			$this->assertTrue( user_can( self::$editor_user_id, 'read_post', $revision->ID ) );
 		}
@@ -345,7 +345,7 @@ class Tests_Post_Revisions extends WP_UnitTestCase {
 		);
 
 		$revisions = wp_get_post_revisions( $post_id );
-		$this->assertCount( 1, $revisions );
+		$this->assertCount( 2, $revisions );
 		$this->assertTrue( user_can( self::$editor_user_id, 'read_post', $post_id ) );
 
 		foreach ( $revisions as $revision ) {
@@ -392,7 +392,7 @@ class Tests_Post_Revisions extends WP_UnitTestCase {
 		);
 
 		$revisions = wp_get_post_revisions( $post_id );
-		$this->assertCount( 1, $revisions );
+		$this->assertCount( 2, $revisions );
 		foreach ( $revisions as $revision ) {
 			$this->assertTrue( user_can( self::$editor_user_id, 'edit_post', $revision->post_parent ) );
 		}
@@ -456,7 +456,7 @@ class Tests_Post_Revisions extends WP_UnitTestCase {
 		);
 
 		$revisions = wp_get_post_revisions( $post_id );
-		$this->assertCount( 2, $revisions );
+		$this->assertCount( 3, $revisions );
 		foreach ( $revisions as $revision ) {
 			$this->assertFalse( current_user_can( 'edit_post', $revision->post_parent ) );
 			$this->assertFalse( current_user_can( 'edit_post', $revision->ID ) );
@@ -517,20 +517,25 @@ class Tests_Post_Revisions extends WP_UnitTestCase {
 	function test_wp_get_post_revisions_should_order_by_post_date() {
 		global $wpdb;
 
+		$now  = time();
+		$date = date( 'Y-m-d H:i:s', $now );
 		$post = self::factory()->post->create_and_get(
 			array(
-				'post_title'   => 'some-post',
-				'post_type'    => 'post',
-				'post_content' => 'some_content',
+				'post_title'    => 'some-post',
+				'post_type'     => 'post',
+				'post_content'  => 'some_content',
+				'post_date'     => $date,
+				'post_date_gmt' => $date
 			)
 		);
 
 		$post                 = (array) $post;
+		$revision_ids         = array();
+		$revisions            = wp_get_post_revisions( $post['ID'] );
+		$revision_ids[]       = current( $revisions )->ID;
 		$post_revision_fields = _wp_post_revision_data( $post );
 		$post_revision_fields = wp_slash( $post_revision_fields );
 
-		$revision_ids = array();
-		$now          = time();
 		for ( $j = 1; $j < 3; $j++ ) {
 			// Manually modify dates to ensure they're different.
 			$date                                  = gmdate( 'Y-m-d H:i:s', $now - ( $j * 10 ) );
@@ -551,20 +556,24 @@ class Tests_Post_Revisions extends WP_UnitTestCase {
 	 * @ticket 26042
 	 */
 	function test_wp_get_post_revisions_should_order_by_ID_when_post_date_matches() {
-		$post = self::factory()->post->create_and_get(
+		$revision_ids = array();
+		$date         = date( 'Y-m-d H:i:s', time() - 10 );
+		$post         = self::factory()->post->create_and_get(
 			array(
-				'post_title'   => 'some-post',
-				'post_type'    => 'post',
-				'post_content' => 'some_content',
+				'post_title'    => 'some-post',
+				'post_type'     => 'post',
+				'post_content'  => 'some_content',
+				'post_date'     => $date,
+				'post_date_gmt' => $date
 			)
 		);
 
 		$post                 = (array) $post;
 		$post_revision_fields = _wp_post_revision_data( $post );
 		$post_revision_fields = wp_slash( $post_revision_fields );
+		$revisions = wp_get_post_revisions( $post['ID'] );
+		$revision_ids[] = current( $revisions )->ID;
 
-		$revision_ids = array();
-		$date         = gmdate( 'Y-m-d H:i:s', time() - 10 );
 		for ( $j = 1; $j < 3; $j++ ) {
 			// Manually modify dates to ensure they're the same.
 			$post_revision_fields['post_date']     = $date;
@@ -581,4 +590,30 @@ class Tests_Post_Revisions extends WP_UnitTestCase {
 
 		$this->assertSame( $revision_ids, array_values( wp_list_pluck( $revisions, 'ID' ) ) );
 	}
+
+	/**
+	 * @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 );
+	}
 }
