Index: src/wp-includes/revision.php
===================================================================
--- src/wp-includes/revision.php	(revision 43581)
+++ src/wp-includes/revision.php	(working copy)
@@ -109,7 +109,16 @@
  * @return int|WP_Error|void Void or 0 if error, new revision ID, if success.
  */
 function wp_save_post_revision( $post_id ) {
-	if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
+	$autosave = defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE;
+	/**
+	 * Filters whether saving of revisions is allowed during autosaves.
+	 * Normally, it is disallowed whenever the `DOING_AUTOSAVE` constant is truthy.
+	 *
+	 * @since 4.9.9
+	 *
+	 * @param bool    $block Is saving of revisions blocked for autosaves. Default is the value of `DOING_AUTOSAVE`
+	 */
+	if ( apply_filters( 'wp_save_post_prevent_revision_for_autosave', $autosave, $post_id ) ) {
 		return;
 	}
 
Index: tests/phpunit/tests/post/revisions.php
===================================================================
--- tests/phpunit/tests/post/revisions.php	(revision 43581)
+++ tests/phpunit/tests/post/revisions.php	(working copy)
@@ -119,7 +119,7 @@
 		); //content unchanged, shouldn't save
 		$this->assertCount( 3, wp_get_post_revisions( $post_id ) ); //should still be 3 revision
 
-		//next try to save another update, same content, but new ttile, should save revision
+		//next try to save another update, same content, but new title, should save revision
 		wp_update_post(
 			array(
 				'post_title'   => 'some-post-changed',
@@ -190,7 +190,7 @@
 		); //content unchanged, shouldn't save
 		$this->assertCount( 4, wp_get_post_revisions( $post_id ) );
 
-		//next try to save another update, same content, but new ttile, should save revision
+		//next try to save another update, same content, but new title, should save revision
 		wp_update_post(
 			array(
 				'post_title'   => 'some-post-changed',
@@ -214,6 +214,59 @@
 	}
 
 	/**
+	 * @ticket 44786
+	 */
+	function test_revision_block_revision_for_autosave() {
+		add_filter( 'wp_save_post_prevent_revision_for_autosave', '__return_false' );
+		$post    = get_default_post_to_edit( 'post', true );
+		remove_filter( 'wp_save_post_prevent_revision_for_autosave', '__return_false' );
+
+		$post_id = $post->ID;
+
+		$this->assertCount( 0, wp_get_post_revisions( $post_id ), 'There should be no revisions on auto-draft creation.' );
+
+		$filter_false_and_check_post_id = function( $autosave, $_post_id ) use ( $post_id ) {
+			$this->assertSame( $post_id, $_post_id, 'post_id in the filtering function does not match.' );
+			return false;
+		};
+
+		add_filter( 'wp_save_post_prevent_revision_for_autosave', $filter_false_and_check_post_id, 10, 2 );
+
+		wp_update_post(
+			array(
+				'post_status'  => 'draft',
+				'post_title'   => 'some-post',
+				'post_type'    => 'post',
+				'post_content' => 'some_content',
+				'ID'           => $post_id,
+			)
+		);
+
+		$this->assertCount( 1, wp_get_post_revisions( $post_id ), 'Revision count should be 1 after an update.' );
+
+		wp_update_post(
+			array(
+				'post_content' => 'some updated content',
+				'ID'           => $post_id,
+			)
+		);
+		$this->assertCount( 2, wp_get_post_revisions( $post_id ), 'Revision count should be 2 after another update.' );
+
+		remove_filter( 'wp_save_post_prevent_revision_for_autosave', $filter_false_and_check_post_id );
+
+		add_filter( 'wp_save_post_prevent_revision_for_autosave', '__return_true' );
+		wp_update_post(
+			array(
+				'post_content' => 'new update for some updated content',
+				'ID'           => $post_id,
+			)
+		);
+		remove_filter( 'wp_save_post_prevent_revision_for_autosave', '__return_true' );
+
+		$this->assertCount( 2, wp_get_post_revisions( $post_id ), 'Revision count should still be 2 after another update with blocking re-enabled.' );
+	}
+
+	/**
 	 * Tests the Caps used in the action=view case of wp-admin/revision.php
 	 *
 	 * @ticket 16847
