patch 9.0.0783: ":!" doesn't do anything but does update the previous command

Problem:    ":!" doesn't do anything but does update the previous command.
Solution:   Do not have ":!" change the previous command. (Martin Tournoij,
            closes #11372)
diff --git a/src/ex_cmds.c b/src/ex_cmds.c
index 7f41c79..f5271ea 100644
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -957,6 +957,11 @@
 	}
     } while (trailarg != NULL);
 
+    // Don't do anything if there is no command as there isn't really anything
+    // useful in running "sh -c ''".  Avoids changing "prevcmd".
+    if (STRLEN(newcmd) == 0)
+	return;
+
     vim_free(prevcmd);
     prevcmd = newcmd;
 
diff --git a/src/testdir/test_shell.vim b/src/testdir/test_shell.vim
index cacb02b..1b4b1f9 100644
--- a/src/testdir/test_shell.vim
+++ b/src/testdir/test_shell.vim
@@ -251,4 +251,35 @@
   call delete('Xtestout')
 endfunc
 
+func Test_shell_repeat()
+  CheckUnix
+
+  let save_shell = &shell
+
+  call writefile(['#!/bin/sh', 'echo "Cmd: [$*]" > Xlog'], 'Xtestshell', 'D')
+  call setfperm('Xtestshell', "r-x------")
+  set shell=./Xtestshell
+  defer delete('Xlog')
+
+  call feedkeys(":!echo coconut\<CR>", 'xt')   " Run command
+  call assert_equal(['Cmd: [-c echo coconut]'], readfile('Xlog'))
+
+  call feedkeys(":!!\<CR>", 'xt')              " Re-run previous
+  call assert_equal(['Cmd: [-c echo coconut]'], readfile('Xlog'))
+
+  call writefile(['empty'], 'Xlog')
+  call feedkeys(":!\<CR>", 'xt')               " :! is a no-op
+  call assert_equal(['empty'], readfile('Xlog'))
+
+  call feedkeys(":!!\<CR>", 'xt')              " :! doesn't clear previous command
+  call assert_equal(['Cmd: [-c echo coconut]'], readfile('Xlog'))
+
+  call feedkeys(":!echo banana\<CR>", 'xt')    " Make sure setting previous command keeps working after a :! no-op
+  call assert_equal(['Cmd: [-c echo banana]'], readfile('Xlog'))
+  call feedkeys(":!!\<CR>", 'xt')
+  call assert_equal(['Cmd: [-c echo banana]'], readfile('Xlog'))
+
+  let &shell = save_shell
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index 433152e..0f6b59a 100644
--- a/src/version.c
+++ b/src/version.c
@@ -696,6 +696,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    783,
+/**/
     782,
 /**/
     781,