diff --git a/lib/manager/git-submodules/update.spec.ts b/lib/manager/git-submodules/update.spec.ts
index ad45dab18a7ee2ebbb7470b344bdaeb88f5a3c14..e07bb92f785f36092c95ce4ab5c4235e63159f72 100644
--- a/lib/manager/git-submodules/update.spec.ts
+++ b/lib/manager/git-submodules/update.spec.ts
@@ -1,5 +1,6 @@
 import _simpleGit from 'simple-git';
 import { dir } from 'tmp-promise';
+import { Upgrade } from '../common';
 
 import updateDependency from './update';
 
@@ -8,28 +9,35 @@ const simpleGit: any = _simpleGit;
 
 describe('manager/git-submodules/update', () => {
   describe('updateDependency', () => {
+    let upgrade: Upgrade;
+    beforeAll(async () => {
+      const tmpDir = await dir();
+      upgrade = { localDir: tmpDir.path, depName: 'renovate' };
+    });
     it('returns null on error', async () => {
       simpleGit.mockReturnValue({
-        raw() {
+        submoduleUpdate() {
           throw new Error();
         },
       });
       const update = await updateDependency({
         fileContent: '',
-        upgrade: {},
+        upgrade,
       });
       expect(update).toBeNull();
     });
     it('returns content on update', async () => {
-      const tmpDir = await dir();
       simpleGit.mockReturnValue({
-        raw() {
+        submoduleUpdate() {
+          return Promise.resolve();
+        },
+        checkout() {
           return Promise.resolve();
         },
       });
       const update = await updateDependency({
         fileContent: '',
-        upgrade: { localDir: tmpDir.path },
+        upgrade,
       });
       expect(update).toEqual('');
     });
diff --git a/lib/manager/git-submodules/update.ts b/lib/manager/git-submodules/update.ts
index 50ba37201283ee7f7ce2c7479bff445b9c13fcd2..58a4d1209a918897fad9ef03cccbe32fbf2084cc 100644
--- a/lib/manager/git-submodules/update.ts
+++ b/lib/manager/git-submodules/update.ts
@@ -1,4 +1,5 @@
 import Git from 'simple-git';
+import upath from 'upath';
 
 import { UpdateDependencyConfig } from '../common';
 
@@ -7,15 +8,11 @@ export default async function updateDependency({
   upgrade,
 }: UpdateDependencyConfig): Promise<string | null> {
   const git = Git(upgrade.localDir);
+  const submoduleGit = Git(upath.join(upgrade.localDir, upgrade.depName));
 
   try {
-    await git.raw([
-      'submodule',
-      'update',
-      '--init',
-      '--remote',
-      upgrade.depName,
-    ]);
+    await git.submoduleUpdate(['--init', upgrade.depName]);
+    await submoduleGit.checkout([upgrade.newVersion]);
     return fileContent;
   } catch (err) {
     return null;